我正在制作一个项目,我需要从文件中删除行。 例: (通过读取文件,例如“list.txt”)
1 Hello DELETE
2 Hi DELETE
3 Hey DELETE
我已经尝试过如何做到这一点,但我找不到办法去做。我也试过在谷歌搜索它。
答案 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");
}
它将整个文件读入内存,然后写入所有行以保留回文件。