0

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

这是我已经拥有的代码:

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 文件中的特定文本行。

4

3 回答 3

0

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

代替

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

尝试

if(String.IsNullOrEmpty(line) || String.Equals(line.Trim(), line_to_delete))

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

编辑- 仅替换文本

File.WriteAllText(file, File.ReadAllText(text).Replace(line_to_delete,"")) 

如果上述方法有效,它将替换代码中的所有 using 块

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

于 2012-05-16T09:26:41.920 回答
0

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

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

于 2012-05-16T09:28:29.853 回答
0

从您的评论中,我了解到您正在尝试删除以 -- 开头的行。如果是这种情况,您只需要更改 if 条件:

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

到:

            if (line.Trim().IndexOf(line_to_delete) == 0)
                continue;
于 2012-05-16T09:55:42.927 回答