0

我正在编写一个比较很多文件的程序。

我首先按文件大小对文件进行分组。然后我在分组文件之间逐字节检查它们。在逐字节比较之前我可以检查哪些参数或属性以最小化使用它?

更新:要获得校验和,我需要读取整个文件。我寻求一些可以过滤不相等文件的属性。我忘了说我需要 100% 相等的文件。哈希函数有冲突。

4

2 回答 2

2

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

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

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

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

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

您还可以通过并行化来提高工作速度。这是通过创建线程来完成的。例如,如果代码在四核机器上运行,您创建 4 个线程并将工作分配给 4 个线程。

于 2013-02-22T15:37:17.877 回答
0

检查文件的校验和。它是为这个任务而修复的

对于 Python,您可以使用hashlib。例如,对于 C,您可以使用openssl 中的 md5。对于phpMySQL以及可能对于所有其他编程语言都有类似的功能

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

于 2013-02-22T12:02:43.677 回答