列出文件中的行,并创建删除行的选项

时间:2012-09-16 13:47:47

标签: c#

我正在制作一个项目,我需要从文件中删除行。 例: (通过读取文件,例如“list.txt”)

1 Hello DELETE
2 Hi    DELETE
3 Hey   DELETE

我已经尝试过如何做到这一点,但我找不到办法去做。我也试过在谷歌搜索它。

3 个答案:

答案 0 :(得分:2)

而不是从文本文件中删除行,重写将是更好的选择。如果你有一个大文本文件,那么将所有行读入内存的优化程度不高。 ReadLines方法正在处理此案例

  

使用ReadLines时,可以在返回整个集合之前开始枚举字符串集合;当您使用ReadAllLines时,必须等待返回整个字符串数组才能访问该数组。因此,当您使用非常大的文件时,ReadLines可以更有效。

假设您有方法检查是否应该删除一行:

 bool ShouldDeleteLine(string line)
 {
 }

代码:

 string tempFile = Path.GetTempFileName();

 var lines = File.ReadLines("list.txt")
                    .Where(line => !ShouldDeleteLine(line));

 File.WriteAllLines(tempFile, lines);

 File.Delete("list.txt");
 File.Move(tempFile, "list.txt");

答案 1 :(得分:0)

将所有行读入内存,然后将其写回文件,不包括您要删除的行。如果它是一个非常大的文件,你不能同时存储在内存中,你可以一次几行,并将其写入一个新文件(减去要删除的行)。然后,当您浏览原始文件时,请继续并删除它并将新名称重命名为原始名称。

答案 2 :(得分:0)

使用类似的东西:

void DeleteLines()
{
    var filePath = @"path/to/file.txt";
    string[] lines = File.ReadAllLines(filePath);
    File.WriteAllLines(filePath, lines.Where(KeepLine));
}   

bool KeepLine(string line)
{
    // Decide whether to keep this line. The line below for example
    // Keeps all lines except the ones containing the word "Hey".
    return !line.Contains("Hey");
}

它将整个文件读入内存,然后写入所有行以保留回文件。