Vb .net比较两个文本文件

时间:2013-01-03 01:04:13

标签: .net vb.net algorithm compare

我有一个用.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

它的工作方式除外,它只会显示是否有东西被添加到行尾。如果在中间添加或删除任何内容,它将显示整个文本文件。 有任何想法吗。 的< - 编辑 - > 所以我通过创建两个列表框来工作,将文本文件转储到每个列表框中,然后将列表框与以下代码进行比较。 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() 这给了我差异,但这似乎是一个很长的路。任何人都知道在没有使用列表框的情况下是否有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

这不是一个简单的问题。事实上,有时候不止一种解决方案也同样出色。例如,如果文件A包含“141”而B包含“1441”,则在第2个或第3个字符处插入新的“4”?所以没有单一的.net函数来实现这一目标。但是,您可能能够找到具有此功能的开源库。

解决问题的一种方法是找到文件的longest common substring,然后在剩余的一半上递归执行相同的操作,直到没有更多常见的子串(长度超过最小值)。

答案 1 :(得分:0)

您是否在尝试确定它们是否相同?如果是这样,比较两者上的字节数组可能是最好的方法。

答案 2 :(得分:0)

这样的事情会起作用吗?

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

    }