-1

.net 2.0 で書かれたプログラムがあり、2 つのテキスト ファイルを比較する必要があります。次のコードを試しました

Dim fileA As String
Dim fileB As String
Dim fileypath As String = (Environment.GetEnvironmentVariable("APPDATA") & "\ARLS\")
Dim sReaderA As New IO.StreamReader(New IO.FileStream(fileypath & "orig.dat", IO.FileMode.Open))
Dim sReaderB As New IO.StreamReader(New IO.FileStream(fileypath & "comp.dat", IO.FileMode.Open))
fileA = sReaderA.ReadToEnd
fileB = sReaderB.ReadToEnd
sReaderA.Close()
sReaderB.Close()
If fileA.CompareTo(fileB) = -1 Then
    MessageBox.Show(fileB.Replace(fileA, "")) '/// show the words in fileB which differ from fileA.
End If
If fileB.CompareTo(fileA) = -1 Then
    MessageBox.Show(fileA.Replace(fileB, "")) '/// show the words in fileB which differ from fileB.
End If

また、行末に何かが追加された場合にのみ表示されることを除いて機能します。途中で何かを追加または削除すると、テキスト ファイル全体が表示されます。何か案は。 <--EDIT--> そこで、2 つのリスト ボックスを作成し、テキスト ファイルをそれぞれにダンプしてから、リスト ボックスを次のコードと比較することで機能させました。For i As Integer = 0 To ListBox2.Items.Count - 1 If ListBox1.Items.Contains(ListBox2.Items(i)) Then Else LogPrint(ListBox2.Items(i)) End If Next For i As Integer = 0 To ListBox1.Items.Count - 1 If ListBox2.Items.Contains(ListBox1.Items(i)) Then Else LogPrint(ListBox1.Items(i)) End If Next ListBox2.Items.Clear() ListBox1.Items.Clear() これで違いがわかりますが、それは長い道のりのようです。リストボックスを使わずにそれを行うより良い方法があるかどうかは誰にも分かりますか?

4

3 に答える 3

2

これは単純な問題ではありません。実際、同じように優れたソリューションが複数存在する場合もあります。たとえば、ファイル A に「141」、B に「1441」が含まれている場合、新しい「4」は 2 文字目または 3 文字目に挿入されましたか? したがって、これを実現する単一の .net 関数はありません。ただし、この機能を備えたオープン ソース ライブラリを見つけることができる場合があります。

この問題を解決する 1 つの方法は、ファイルの最も長い共通部分文字列を見つけ、共通部分文字列がなくなる (最小サイズより長い) まで、残りの半分に対して同じことを再帰的に行うことです。

于 2013-01-03T01:48:03.050 に答える
0

それらが同一であるかどうかを判断しようとしていますか?その場合、両方のバイト配列を比較するのが最善の方法かもしれません。

于 2013-01-03T01:09:38.027 に答える
-1

このようなものは機能しますか?

public void CheckFiles() {

//iterate through files...

    using (StreamReader r1 = new StreamReader("file1")) {

          using (StreamReader r2 = new StreamReader("file2")) {

                 while (!r1.EndOfStream && !rs.EndOfStream ) {

                      bool areLinesIdentical = compareLines(r1.readLine(), r2.readLine());

                      if (!areLinesIdentical) {

                      Console.WriteLine("These two lines do not match!" + r1.readLine() + " and " + r2.readLine());

                      }

                 }


             }


       }

}


    private static bool compareLines(string s1, string s2) {

    if (s1 == s2) { return true; }

    else { return false; }

    }
于 2013-01-03T02:28:58.600 に答える