C#:删除Txt文件中的一行
我想在使用StreamReader.WriteLine()获取数据后删除txt文件中的一行。 但我无法从网上得到任何有用的参考资料。 有人告诉我,我可以用Repalce()方法来实现它,但我认为它没有效果。C#:删除Txt文件中的一行,c#,C#,我想在使用StreamReader.WriteLine()获取数据后删除txt文件中的一行。 但我无法从网上得到任何有用的参考资料。 有人告诉我,我可以用Repalce()方法来实现它,但我认为它没有效果。 有人能告诉我怎么解决吗。谢谢你不能在文件中间删除什么东西。从那时起,您要么重写所有内容,要么干脆重写整个文件。如果您使用的是StreamReader/StreamWriter,则无法访问文件位置,因此您唯一的选择是重写整个文件 下面是一个关于如何做的示例方法 public stati
有人能告诉我怎么解决吗。谢谢你不能在文件中间删除什么东西。从那时起,您要么重写所有内容,要么干脆重写整个文件。如果您使用的是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);
}
}
它删除了所有长度为10个字符的行,并使用临时文件将相关风险降至最低。当然,如果你想要短一点的,你可以这样做
File.WriteAllLines(fileName,File.ReadAllLines(fileName).Where(line => line.Length != 10))
需要更多的工作内存,您可能应该使用tempfile/move技巧来避免导致文件损坏的计算机崩溃。但是代码是紧凑的,易于理解。 您不能在文件中间删除某些东西。从那时起,您要么重写所有内容,要么干脆重写整个文件。如果您使用的是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);
}
}
它删除了所有长度为10个字符的行,并使用临时文件将相关风险降至最低。当然,如果你想要短一点的,你可以这样做
File.WriteAllLines(fileName,File.ReadAllLines(fileName).Where(line => line.Length != 10))
需要更多的工作内存,您可能应该使用tempfile/move技巧来避免导致文件损坏的计算机崩溃。但是它是简洁易懂的代码。将其视为非有效方法的原因是什么?将其视为非有效方法的原因是什么?