Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:删除Txt文件中的一行_C# - Fatal编程技术网

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

C#:删除Txt文件中的一行,c#,C#,我想在使用StreamReader.WriteLine()获取数据后删除txt文件中的一行。 但我无法从网上得到任何有用的参考资料。 有人告诉我,我可以用Repalce()方法来实现它,但我认为它没有效果。 有人能告诉我怎么解决吗。谢谢你不能在文件中间删除什么东西。从那时起,您要么重写所有内容,要么干脆重写整个文件。如果您使用的是StreamReader/StreamWriter,则无法访问文件位置,因此您唯一的选择是重写整个文件 下面是一个关于如何做的示例方法 public stati

我想在使用StreamReader.WriteLine()获取数据后删除txt文件中的一行。 但我无法从网上得到任何有用的参考资料。 有人告诉我,我可以用Repalce()方法来实现它,但我认为它没有效果。
有人能告诉我怎么解决吗。谢谢

你不能在文件中间删除什么东西。从那时起,您要么重写所有内容,要么干脆重写整个文件。如果您使用的是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技巧来避免导致文件损坏的计算机崩溃。但是它是简洁易懂的代码。

将其视为非有效方法的原因是什么?将其视为非有效方法的原因是什么?