我正在做一个项目,我需要从文件中删除行。示例:(通过从文件中读取,例如“list.txt”)
1 Hello DELETE
2 Hi DELETE
3 Hey DELETE
我已经尝试过思考如何做到这一点,但我找不到办法做到这一点。我也试过在谷歌中搜索它。
我正在做一个项目,我需要从文件中删除行。示例:(通过从文件中读取,例如“list.txt”)
1 Hello DELETE
2 Hi DELETE
3 Hey DELETE
我已经尝试过思考如何做到这一点,但我找不到办法做到这一点。我也试过在谷歌中搜索它。
与其从文本文件中删除行,不如重写将是更好的选择。如果您有一个很大的文本文件,则将所有行读入内存并没有得到太多优化。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");
将所有行读入内存,然后将其写回文件,不包括要删除的行。如果它是一个非常大的文件,您无法一次将其全部存储在内存中,您可以一次执行几行并将其写入一个新文件(减去要删除的行)。然后,当您浏览完原始文件时,继续删除它并将新文件重命名为原始名称。
使用这样的东西:
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");
}
它将整个文件读入内存,然后将所有行写回文件中。