C#:删除Txt文件中的一行

时间:2009-08-27 08:15:09

标签: c#

我想在使用StreamReader.WriteLine()获取数据后删除txt文件中的一行。 但我无法获得任何有用的网络参考。 有人告诉我,我可以用Repalce()方法做到这一点。但我不认为它有效。 任何人都可以告诉我如何解决它。谢谢!

1 个答案:

答案 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技巧来对冲导致文件损坏的计算机崩溃。但它是紧凑且易于理解的代码。