最简单以什么方式查找两个文本文件是否以编程方式不同?鉴于两个文件,我只需要知道它们是否不同。这是一个快速工具,可以帮助进行特别讨厌的合并(在一个分支中切换从VB到C#的语言(耶!),并在另一个分支中进行许多更改),它不会投入生产。
可能的解决方案:
如果可能的话,忽略空白区域会很棒,但我并不在乎它。最重要的是它需要快速简便。
顺便说一下,我正在使用.Net 3.5sp1。感谢您的任何想法或指示。
答案 0 :(得分:11)
Microsoft知识库中有一篇文章,希望它有所帮助。他们比较字节以查看两个文件是否不同 - How to create a File-Compare function in Visual C#
答案 1 :(得分:10)
最快的方法是比较流上加载的文件的字节到字节。散列这两个文件对于大文件来说需要太长时间,字符串比较也需要外部工具。
比较字节到字节对你来说是最好的,因为它们只有在两者相同时才能达到文件的EOF。
如果你进行哈希比较,字符串比较或外部工具,你必须在比较时经历整个文件,比较逐字节只会在它们相同的情况下进行。
答案 2 :(得分:4)
逐字节检查,这里是一些代码:
public static bool AreFilesIdentical(string path1, string path2)
{
using (FileStream file1 = new FileStream(path1)) {
using (FileStream file2 = new FileStream(path2)) {
if (file1.Length == file2.Length) {
while (file1.Position < file1.Length) {
if (file1.ReadByte() != file2.ReadByte()) {
return false;
}
}
return true;
}
return false;
}
}
}
答案 3 :(得分:3)
使用MD5哈希算法会比较结果吗?这是一个example。
答案 4 :(得分:1)
这还取决于您要解决的问题。您是否尝试回答这个问题:在N个文件的目录中,找到所有完全重复的内容?或者这两个文件完全相同?
如果您只是比较两个文件,那么使用逐字节检查会更有效。
但是如果你试图找到N个文件中的所有重复对,那么MD5哈希更好,因为你可以创建并存储一次MD5哈希值,并将这个小得多的值与每对文件进行比较。另外,您将遍历目录中每个其他文件的每个文件字节流。
答案 5 :(得分:1)
我在一年前实现了一个非常专业的差异版本(我的文件超过6GB,不得不进行比较)。所以我知道diff的内部工作原理(当然是很多副本和粘贴)。一些想法:
如果您愿意,我可以提供代码。差异文件更复杂,因为您还将输出不同的文件。
答案 6 :(得分:0)
从问题 - 最简单&amp;文本文件
StreamReader sr1 = new StreamReader(filePath1);
StreamReader sr2 = new StreamReader(filePath2);
if (sr1.ReadToEnd() == sr2.ReadToEnd() )
{ do stuff }
它不快或不漂亮,但很容易
答案 7 :(得分:0)
if ( $file1 != $file2 ) return true;
当然这在VB和C#之间有所不同