我想在使用StreamReader.WriteLine()获取数据后删除txt文件中的一行。 但我无法获得任何有用的网络参考。 有人告诉我,我可以用Repalce()方法做到这一点。但我不认为它有效。 任何人都可以告诉我如何解决它。谢谢!
答案 0 :(得分:4)
您无法删除文件中间的内容。您要么必须重写从那一点开始的所有内容,要么只是重写整个文件。如果您正在使用StreamReader / StreamWriter,那么您无权访问文件位置,因此您唯一的选择是重写整个文件。
以下是有关如何操作的示例方法。
public static void RemoveLines(Predicate<string> removeFunction,string file){
string line, tempFile = null;
try{
tempFile = Path.GetTempFileName();
using (StreamReader sr = new StreamReader(file))
using (StreamWriter sw = new StreamWriter(tempFile,false,sr.CurrentEncoding))
while ((line = sr.ReadLine()) != null)
if (!removeFunction(line)) sw.WriteLine(line);
File.Delete(file);
File.Move(tempFile, file);
}finally{
if(tempFile != null && File.Exists(tempFile))
File.Delete(tempFile);
}
}
像这样使用
RemoveLines(line=>line.Length==10,"test.txt")
它删除所有长度为10个字符的行,并使用临时文件来最小化所涉及的风险。当然,如果你想要更短的东西,你可以做这样的事情。
File.WriteAllLines(fileName,File.ReadAllLines(fileName).Where(line => line.Length != 10))
需要更多工作内存,你可能应该使用tempfile / move技巧来对冲导致文件损坏的计算机崩溃。但它是紧凑且易于理解的代码。