2013-01-16 36 views
7

兩個文本文件線下方在這裏,我描述的示例場景:比較一行

「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 
     } 

回答

26
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); 
+0

它不是標準的比較,由於文件將被視爲相同的,如果同一組線有不同的序列。 –

+1

我知道這是一個古老的問題,但如何處理大文件,例如1個演出或更多?我試過這個答案,並最終結束了內存異常.. – Angelo

+0

@安吉洛你有沒有發現任何東西? – null

9

由於您的問題似乎是你沒有做任何努力,我給你只是一個大致的輪廓。

  1. 逐行讀取兩個文件,例如,與File.ReadAllLinesFile.ReadLines
  2. 使用LINQ的Except方法。
  3. 將結果寫入新文件。
+1

我想,我需要一個簡單的方法...發佈我做了什麼:對 – Developman