我有一个用.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()
这给了我差异,但这似乎是一个很长的路。任何人都知道在没有使用列表框的情况下是否有更好的方法吗?
答案 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; }
}