-1

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

1 Hello DELETE
2 Hi    DELETE
3 Hey   DELETE

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

4

3 回答 3

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");
于 2012-09-16T14:18:39.883 回答
0

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

于 2012-09-16T13:51:18.613 回答
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");
}

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

于 2012-09-16T14:03:29.907 回答