将文本插入大型现有文件中

时间:2015-04-13 08:47:51

标签: c# file

我有一个文件,其中包含大约2000行文字,我需要添加几行。我的初始解决方案是将现有文件复制到新文件,然后在其末尾添加几行。直到我意识到文件中的最后一行必须始终是最后一行。所以现在我需要在那一行文本之前添加我的新行。我知道我可以只读取整个文件,将其保存到我的程序中,然后将所有内容写入包含额外行的新文件。但是,由于该文件有很多行我想知道它是否是更好的方法。

2 个答案:

答案 0 :(得分:2)

您需要将其复制到新文件中。不幸的是,没有办法将数据注入文件的中间。

但是,您不必将其加载到内存中即可。您可以使用StreamReader一次只读一行,或者更好的是System.IO.File.ReadLines方法。

int newLineIndex = 100;
string newLineText = "Here's the new line";
using (var writer = new StreamWriter(outputFileName))
{
    int lineNumber = 0;
    foreach (var line in File.ReadLines(inputFileName))
    {
        if (lineNumber == newLineIndex)
        {
            writer.WriteLine(newLineText);
        }
        else if (lineNumber > 0)
        {
            writer.WriteLine();
        }

        writer.Write(line);

        lineNumber++;
    }
}

当然,如果你习惯假设新线总是在零指数处,这会变得非常容易。如果是这样的话,我很想放弃大部分内容,在写完第一行之后只需要一个简单的Stream.CopyTo。但这应该仍然有效。

string newLineText = "Here's the new line";
using (var writer = new StreamWriter(outputFileName))
using (var reader = File.OpenRead(inputFileName))
{
    writer.WriteLine(newLineText);

    reader.CopyTo(writer.BaseStream);
}

当然,有许多方法可以执行此操作,并进行不同的权衡。这只是一个选择。

答案 1 :(得分:0)

  

我可以只读取整个文件,将其保存到我的程序中,然后将所有内容写入一个包含额外行的新文件。

不是所有东西都需要写。只需将插入的行后插入的行和行写入原始文件,从插入行的位置(字节索引)开始。