2013-02-12 107 views
0

我在比較兩個文件,類似於如何將源代碼中的代碼版本與更新的版本進行比較。我仍然是一個慢編碼器:-S。我的問題在於設計的正確性,所以請介入並告訴我它如何最好地工作,並希望不會太複雜。比較兩個文件的內容,顯示差異

所以爲此我目前的計劃基本上是將兩個文件加載到單獨的文本框(?)中。流通過它們分別讀入兩個數組列表並將數組列表相互比較。並有一些額外的檢查文件大小等

我怎麼可以通過我比較的文本框循環,並突出顯示例如在紅色哪裏有差異?我不知道我該怎麼做?

高級別的猜測,我會讀兩個數組中的差異(比如元素11)並突出顯示文本框的數據位置/元素嗎?

+3

得到你自己的WinDiff並且不需要編碼(除此之外,問題本身實際上相當複雜並且有很多選項:忽略空白,忽略大小寫,重新排序的行,重新排序的單詞...... – 2013-02-12 21:33:50

回答

4

除非你將此作爲一種學習體驗,否則我建議利用現有的實現方式......避免重蹈覆轍。有效區分文件並不是一件小事。

有谷歌的DIFF匹配補丁

http://code.google.com/p/google-diff-match-patch/

的C#端口您可以編譯爲C#爲DLL,然後使用DLL從您的VB.Net項目。

即使你的目標是要學習,如此複雜的話題,我會建議研究一個現存的實現。

+0

兩個很好的答案。 – Jonny 2013-02-26 12:40:36

2

您不需要顯示能夠比較它們的文件內容。你可以使用的方法從類System.IO.File閱讀的內容和LINQ查詢對它們進行比較:

下面是一個簡單和短期的辦法:

Dim f1Lines = System.IO.File.ReadLines(file1Path) 
Dim f2Lines = System.IO.File.ReadLines(file1Path) 
Dim inFile1Only = f1Lines.Except(f2Lines) 
Dim inFile2Only = f2Lines.Except(f1Lines) 
Dim sameInBoth = f1Lines.Intersect(f2Lines) 

您可以顯示不同的文本框的結果。您可以使用

TxtSame.Lines = sameInBoth.ToArray() 

將行分配給TextBox

+2

行順序怎麼樣? – Neolisk 2013-02-13 01:27:41