【发布时间】:2013-11-28 12:45:24
【问题描述】:
我想替换文本文件中的一个特定行。最简单的解决方案是:
public void ModifyFile(string path, int line, string targetText) {
var lines = File.ReadAllLines(path);
lines[line] = targetText;
File.WriteAllLines(path, lines);
}
问题是,如果文件足够大,我会得到一个System.OutOfMemoryException,因为File.ReadAllLines() 会尝试将整个文件加载到内存中,而不是逐行加载。
我知道还有另一种方法可以以更少的内存成本读取特定行:
var line = File.ReadLines(path).Skip(line-1).Take(1).ToString();
如何替换文件中的那一行?
我正在寻找类似FileStream.Write Method:
var writer = File.OpenWrite(path);
writer.Write(Encoding.UTF8.GetBytes(targetText),
offset, Encoding.UTF8.GetByteCount(targetText));
但很难知道offset。
有更好的方法吗?
-- 更新--
答案建议的临时文件解决方案效果很好。
同时,我想知道,如果我知道line 是一个小数字(line 让我们说)?如果我想更改具有 100m 行的文本文件中的第 10 行,必须有更好的解决方案。
【问题讨论】:
-
stackoverflow.com/questions/13748282/… 具体案例解决方案。
标签: c#