逐行比较两个文本文件

本文关键字:两个 文本 文件 比较 逐行 | 更新日期: 2023-09-27 17:53:41

下面我描述了一个示例场景:

"FileA-Database.txt"包含以下名称:

KB200

KB300

KB400

"FileB-Slave.txt"包含以下名称:

KB600

KB200

KB400

KB700

我想比较"FileA-Database.txt"与"FileB-Slave.txt",让缺失的值在"FileA-Database.txt"文件中自动填写,我还需要在一个名为"Results.txt"的文本文件中显示缺失的值。

代码需要兼容c#(框架4.0+)请!

我需要一个简单的方法,我的并不完全按照我想要的方式工作:

    private void button_compare_Click(object sender, EventArgs e)
        {
            string fileA, fileB, fileC;
            fileA = "database-critical.txt";
            fileB = "patchlist.txt";
            fileC = "result.txt";
            string alphaFilePath = fileA;
            List<string> alphaFileContent = new List<string>();
            using (FileStream fs = new FileStream(alphaFilePath, FileMode.Open))
            using(StreamReader rdr = new StreamReader(fs))
            {
                while(!rdr.EndOfStream)
                {
                    alphaFileContent.Add(rdr.ReadLine());
                }
            }
            string betaFilePath = fileB;
            StringBuilder sb = new StringBuilder();

            using (FileStream fs = new FileStream(betaFilePath, FileMode.Open))
            using (StreamReader rdr = new StreamReader(fs))
            {
                while(! rdr.EndOfStream)
                {
                    string[] betaFileLine = rdr.ReadLine().Split(Convert.ToChar(","));
                    if (alphaFileContent.Contains(betaFileLine[0]))
                    {
                        sb.AppendLine(String.Format("{0}", betaFileLine[0]));
                    }
                }
            }
using (FileStream fs = new FileStream(fileC, FileMode.Create))
        using (StreamWriter writer = new StreamWriter(fs))
        {
            writer.Write(sb.ToString());
        }
    }
            //End
        }

逐行比较两个文本文件

String directory = @"C:'Whatever'";
String[] linesA = File.ReadAllLines(Path.Combine(directory, "FileA-Database.txt"));
String[] linesB = File.ReadAllLines(Path.Combine(directory, "FileB-Database.txt"));
IEnumerable<String> onlyB = linesB.Except(linesA);
File.WriteAllLines(Path.Combine(directory, "Result.txt"), onlyB);

既然你的问题似乎没有付出任何努力,我就给你一个大概的轮廓。

  1. 逐行读取两个文件,例如File.ReadAllLinesFile.ReadLines
  2. 使用LINQ的Except方法
  3. 将结果写入新文件