c#比较2个文本文件并删除几行

时间:2018-07-10 09:53:25

标签: c# .net string stream

我需要比较2个文本文件,其中包括几行。 第一个文件包含63行,第二个文件包含10行。因此,如果第一行包含第二行,则我需要对其进行比较并删除,也就是说,如果第二个文件中的那10行包含在第一个文件中,则将其删除从第一个文件开始。

        string line = null;
        string[] lines = File.ReadAllLines(@"D:\trash.txt").ToArray();
        using (StreamReader file = new StreamReader(@"D:\write.txt"))
        {
            while ((line = file.ReadLine()) != null)
            {
                for (int i = 0; i < lines.Length; i++)
                {
                    if (!line.Contains(lines[i]))
                    {
                        using (StreamWriter writer = new StreamWriter(@"D:\numbers.txt", true))
                        {
                            writer.WriteLine(line);
                        }
                    }
                }
            }
        }

我试图像这样比较它们,而不是将相同的行写入新文件。但是正如您所看到的,如果!line.Contains(lines [i])为true,则此代码将写一行10次,导致lines.Length等于10

1 个答案:

答案 0 :(得分:0)

简单方法:

对于文件1中的每一行x:
对于文件2中的每一行y:
比较第x和y行,如果匹配,则从文件1中删除第x行

如果要测试的行数(文件2)足够小或如果有足够的可用内存,则是更好的方法:

将文件2中的所有行加载到哈希表中
对于文件1中的每一行x:
检查哈希表是否包含x,如果是,则从文件1删除行x