从没有名称的文本文件中删除特定行

时间:2018-02-17 20:35:47

标签: c#

我需要找到并删除包含单词" recto",

的所有行

我在stackoverflow论坛上搜索过,但我发现的所有内容都是使用路径(目录和文件名)来删除(删除行)。

在我的情况下,我想删除包含" recto"在目录中具有特定扩展名(* .txt)的所有文件中。

感谢您的帮助

这是我到目前为止的代码

            string sourceDir = @"C:\SRCE\";
        string destinDir = @"C:\DIST\";
        string[] files = Directory.GetFiles(sourceDir);
        foreach (string file in files)
        {
            using (StreamReader sr_ = new StreamReader
            (sourceDir + Path.GetFileName(file)))
            {
                string line = sr_.ReadLine();
                if (line.Contains("recto"))
                {
                    File.Copy(file, destinDir + Path.GetFileName(file));
                    string holdName = sourceDir + Path.GetFileName(file);
                }
                sr_.DiscardBufferedData();
                sr_.Close();
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情。您只是识别带有该单词的文件,但没有尝试删除它。最后,您正在复制包含单词" recto"

的文件
            string sourceDir = @"C:\SRCE\";
            string destinDir = @"C:\DIST\";
            string[] files = Directory.GetFiles(sourceDir);
            foreach (string file in files)
            {
                using (StreamReader sr_ = new StreamReader
                (sourceDir + Path.GetFileName(file)))
                {
                    string res = string.Empty;

                    while(!sr_.EndOfStream)
                    {
                        var l = sr_.ReadLine();

                        if (l.Contains("recto"))
                        {
                            continue;
                        }

                        res += l + Environment.NewLine;
                    }

                    var streamWriter = File.CreateText(destinDir + Path.GetFileName(file));
                    streamWriter.Write(res);
                    streamWriter.Flush();
                    streamWriter.Close();
                }
            }

答案 1 :(得分:0)

如果文件不是很大,你可以简化很多代码,读取内存中的所有行,使用Linq处理行,然后重写文件

string sourceDir = @"C:\SRCE\";
string destinDir = @"C:\DIST\";
string[] files = Directory.GetFiles(sourceDir);
foreach (string file in files)
{
    var lines = File.ReadLines(file);
    var result = lines.Where(x => x != "recto").ToArray();
    File.WriteAllLines(Path.Combine(destinDir, Path.GetFileName(file)), result);
}