将\ n替换为大文本文件中的\ r \ n

时间:2011-06-20 17:22:11

标签: c# text replace

我有一个很大的文本文件\ n我需要用\ r \ n替换。使用小文本文件,我使用ReadToEnd方法将文件作为字符串获取,然后使用Replace方法,然后将字符串写入文件。但是,对于一个大文件,我得到一个OutOfMemory异常,因为字符串太大了。任何帮助将不胜感激。感谢。

4 个答案:

答案 0 :(得分:6)

private void foo() {
      StreamReader reader = new StreamReader(@"D:\InputFile.txt");
      StreamWriter writer = new StreamWriter(@"D:\OutputFile.txt");
      string currentLine;

      while (!reader.EndOfStream) {
        currentLine = reader.ReadLine();
        writer.Write(currentLine + "\r\n");
      }
      reader.Close();
      writer.Close();
    }

这应该可以解决您的问题。请注意,reader.ReadLine()会删除尾随的“\ n”。

答案 1 :(得分:3)

DiableNoir的解决方案是正确的想法,但实施是错误的,需要一些解释。这是一个改进的:

using (var reader = new StreamReader(@"D:\InputFile.txt"))
using (var writer = new StreamWriter(@"D:\OutputFile.txt")) // or any other TextWriter
{
    while (!reader.EndOfStream) {
        var currentLine = reader.ReadLine();
        writer.Write(currentLine + "\r\n");
    }
}

您使用TextReader作为输入,使用TextWriter作为输出(这可能指向文件或内存中的字符串)。 reader.ReadLine返回以行的一部分结尾的行,因此您需要显式地编写它(而不是使用string.Replace,它根本不会完成任何操作)。

另外,正是因为您永远不会将\n\r视为currentLine的一部分,所以此程序可以安全地在其生​​成的输出上运行(在这种情况下,它的输出将与其输入完全相同)。如果currentLine包含行结尾,则情况并非如此,因为它会在第一次将\n更改为\r\n,然后第二次将其设为\r\r\n,等等

答案 2 :(得分:2)

您可以使用Read并指定每次要读取的字节数。比如以10 MB的块读取文件。

答案 3 :(得分:1)

或者,如果您需要更大的缓冲区,可以使用StreamReader.ReadBlock();