如何在进行逐字节比较之前首先检查相等的文件?

时间:2013-02-22 11:38:57

标签: algorithm file compare byte equals

我正在编写一个比较大量文件的程序。

我首先按文件大小分组文件。然后我在分组文件之间逐字节检查它们。我可以在逐字节比较之前检查哪些参数或特性,以最大限度地减少使用它?

UPD: 要获得校验和,我需要阅读整个文件。我寻找一些可以过滤不相等文件的属性。我忘了说我需要100%相等的文件。散列函数有冲突。

2 个答案:

答案 0 :(得分:2)

如果文件被操作系统记录为相同大小,那么除了检查字节之外,无法知道它们是否不同。

对于一组文件,一旦知道两个文件相同,则只需要对两个文件中的一个进行比较。出于这个原因,按日期对文件进行排序是明智的,因为具有相似日期的文件更可能是相同的。因此,您应该维护相同文件的列表。当进行新的比较时,只需将其与列表的头部进行比较。

您应该预先分配尽可能多的内存,并将列表头保留在内存中。

当进行比较时,你不应该实际比较字节,而是单词。例如,在32位机器上,您将从硬盘驱动器读取512字节块中的数据,然后每个块将一次比较4个字节。较新的x86处理器具有称为MMX的矢量化op指令。你想确定你正在使用它们。

如果您使用C语言编写Intel盒,请使用Intel的编译器,而不是Microsoft的编译器。仔细检查程序集以确保编译器没有做一些愚蠢的事情。

您还可以通过并行化来提高工作速度。这是通过创建线程来完成的。例如,如果代码在四核计算机上运行,​​则创建4个线程并在4个线程之间划分工作。

答案 1 :(得分:0)

检查文件的checksum。它正在修复这项任务

对于Python,您可以使用hashlib。对于C,您可以使用md5 from opensslphpMySQL和其他所有编程语言都有类似的功能

最终你可以使用linux内置的md5sum