Val*_*yev 10 c# performance file-io
我需要从文本文件中删除某一行.这样做最有效的方法是什么?文件可能很大(超过百万条记录).
更新:下面是我正在使用的代码,但我不确定它是否好.
internal void DeleteMarkedEntries() {
string tempPath=Path.GetTempFileName();
using (var reader = new StreamReader(logPath)) {
using (var writer = new StreamWriter(File.OpenWrite(tempPath))) {
int counter = 0;
while (!reader.EndOfStream) {
if (!_deletedLines.Contains(counter)) {
writer.WriteLine(reader.ReadLine());
}
++counter;
}
}
}
if (File.Exists(tempPath)) {
File.Delete(logPath);
File.Move(tempPath, logPath);
}
}
Run Code Online (Sandbox Code Playgroud)
Bin*_*ier 10
这样做最直接的方式可能是最好的,将整个文件写入一个新文件,写下除了你不想要的那些之外的所有行.
或者,打开文件以进行随机访问.
阅读到您要"删除"该行的位置.跳过要删除的行,并读取该字节数(包括CR + LF - 如果需要),在删除的行上写入该字节数,按字节数提前两个位置并重复直到文件结束.
希望这可以帮助.
编辑 - 现在我可以看到你的代码了
if (!_deletedLines.Contains(counter))
{
writer.WriteLine(reader.ReadLine());
}
Run Code Online (Sandbox Code Playgroud)
不行,如果它不是你想要的那一行,你还是想读它,就是不写它.上面的代码既不会读取也不会写入.新文件将与旧文件完全相同.
你想要的东西
string line = reader.ReadLine();
if (!_deletedLines.Contains(counter))
{
writer.WriteLine(line);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40555 次 |
最近记录: |