-1

我有一个用 .net 2.0 编写的程序,我需要比较两个文本文件。我试过下面的代码

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--> 所以我通过创建两个列表框,将文本文件转储到每个列表框,然后将列表框与以下代码进行比较来实现它。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 函数可以完成此任务。不过,您也许可以找到具有此功能的开源库。

解决问题的一种方法是找到文件中最长的公共子字符串,然后在剩余的一半上递归地执行相同的操作,直到没有更多的公共子字符串(长于最小大小)。

于 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 回答