加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从文本文件中删除行的有效方法

发布时间:2020-12-16 01:21:32 所属栏目:百科 来源:网络整理
导读:我需要从文本文件中删除某一行.这样做最有效的方法是什么?文件可能很大(超过百万条记录). 更新: 下面是我目前使用的代码,但我不确定它是否好. internal void DeleteMarkedEntries() { string tempPath=Path.GetTempFileName(); using (var reader = new St
我需要从文本文件中删除某一行.这样做最有效的方法是什么?文件可能很大(超过百万条记录).

更新:
下面是我目前使用的代码,但我不确定它是否好.

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);
    }
}

解决方法

这样做最直接的方式可能是最好的,将整个文件写入一个新文件,写下除了你不想要的那些之外的所有行.

或者,打开文件以进行随机访问.

阅读到您要“删除”该行的位置.
跳过要删除的行,并读取该字节数(包括CR LF – 如果需要),在删除的行上写入该字节数,按字节数提前两个位置并重复直到文件结束.

希望这可以帮助.

编辑 – 现在我可以看到你的代码了

if (!_deletedLines.Contains(counter)) 
{                            
    writer.WriteLine(reader.ReadLine());                        
}

不行,如果它不是你想要的那一行,你还是想读它,就是不写它.上面的代码既不会读取也不会写入.新文件将与旧文件完全相同.

你想要的东西

string line = reader.ReadLine();
if (!_deletedLines.Contains(counter)) 
{                            
    writer.WriteLine(line);                        
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读