C# 从.txt文件中删除文本行

C# 从.txt文件中删除文本行,c#,text,C#,Text,我目前正在做一个项目,我必须从文本文件中删除一行特定的文本 这是我已经掌握的代码: static void Main( string[] args ) { string line = null; string line_to_delete = "--"; string desktopLocation = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

我目前正在做一个项目,我必须从文本文件中删除一行特定的文本

这是我已经掌握的代码:

static void Main( string[] args )
    {
        string line = null;
        string line_to_delete = "--";
        string desktopLocation = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        string text = Path.Combine( desktopLocation, "tim3.txt" );
        string file = Path.Combine( desktopLocation, "tim4.txt" );

        using (StreamReader reader = new StreamReader( text))
        {
            using (StreamWriter writer = new StreamWriter(file ))
            {
                while((line = reader.ReadLine()) != null)
                {
                    if (string.Compare( line, line_to_delete ) == 0)
                        continue;
                    writer.WriteLine( line );
                }
            }
这只会将文本写入新的txt文件,但不会删除任何内容

谢谢。
主要问题是我只需要删除txt文件中的一行特定文本。

我怀疑前导空格/训练空格会导致String.comapre返回意外结果

而不是

 if (string.Compare( line, line_to_delete ) == 0)
试一试

如上所述不起作用,您可以尝试以下操作(LINQ)

编辑-仅替换文本

File.WriteAllText(file, File.ReadAllText(text).Replace(line_to_delete,"")) 
若上述方法有效,它将替换代码中的所有using块


如果上述操作不起作用,我怀疑是数据问题(“文本文件中不存在”)

据我所知,您不能同时读取和写入文件(文件锁定)。您可以做的是将适当的数据写入tim4.txt(如您的示例中),完成后,删除tim3.txt并将tim4.txt重命名为tim3.txt


编辑:错误地解释了你的问题。我以为您不能将更改写入同一个文件,但您的文本甚至没有经过过滤。你应该试试Tilan的建议

从你的评论中我知道你试图删除以--开头的行。如果是这种情况,您只需从以下位置更改If条件:

            if (string.Compare( line, line_to_delete ) == 0)
                continue;
致:


你遇到调试器了吗?这应该很容易解决我没有任何错误,但当我运行它时,它只会将第一个txt文件中的所有文本复制到第二个txt文件中。它不会删除我指定的文本或字符。考虑行尾。显示输入数据。Debug可以帮助您理解字符串中有什么不同,以及为什么comparer找不到相等的字符串。这可能会有帮助:String.IsNullOrEmpty(line)| |将跳过空行,我发现它不正确。我只是尝试了这段代码,但它给出了相同的结果。它只是把同一篇文章再写一遍,很难理解到底发生了什么。我会尝试在以line.Contains为条件的if行上放置一个断点(line_to_delete);然后快速观察两个StringsHanks,代码现在正在运行,但我必须指定整行才能删除。在我的课文之前,我有两个。我如何指定只有带--的行必须删除?好的,您只希望删除文本,其余部分应该保持不变,对吗。等等,我见过很多人这么说。我不知道该怎么做,其实很简单。在使用语句之后(当所有IO读/写都完成时),插入一个简单的try/catch块并调用File.Delete(File\ to\ u Delete)。然后,您需要将新文件(tim4)重命名为旧文件(tim3)的名称。由于C#不提供重命名功能,因此可以调用File.Move(旧#文件、新#文件)。这是否澄清了问题?找到了一个完全按照我的意思发布代码的人:
            if (string.Compare( line, line_to_delete ) == 0)
                continue;
            if (line.Trim().IndexOf(line_to_delete) == 0)
                continue;