& # 39; System.OutOfMemoryException& # 39;使用ReadAllText()方法时

本文关键字:方法 OutOfMemoryException System 使用 ReadAllText | 更新日期: 2023-09-27 18:06:31

我有一个以制表符分隔的文件,有8,000,000+行,其中有一些流氓制表符。

例如:

a->b->c->d
a->b->c->-->-->--d
a->b->c->d
a->b->c->d

我有一个方法来纠正流氓标签(3个标签到1个标签),如下所示:

string text = File.ReadAllText(filePath);
text = text.Replace("'t't't", "'t");
File.WriteAllText(filePath, text);

上面的代码块产生以下错误:

类型为"System"的未处理异常。OutOfMemoryException的发生在mscorlib.dll

我怎么能一次只读和写一行,使整个文件不在内存中?

& # 39; System.OutOfMemoryException& # 39;使用ReadAllText()方法时

File.ReadLines给你一个懒惰的IEnumerable<string>。你可以对它进行迭代,每次只加载一行。

但是,您需要写入与读取不同的文件。您可以在完成后删除/重命名。 下面是处理文件的一行代码:
File.WriteAllLines(outputFile, 
    File.ReadLines(inputFile).
    Select(t => t.Replace("'t't't", "'t"))
);