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;