【问题标题】:What are the smart ways to check if two files are same?检查两个文件是否相同的聪明方法是什么?
【发布时间】:2011-10-23 10:19:46
【问题描述】:

我正在寻找智能且有效的方法来检查两个文件是否完全相同。

程序将递归循环所有文件夹,它们可能包含非常大的文件。

所以我决定使用增量检查

循环时:

  1. 获取所有文件大小,将它们放入具有关联文件路径的数据库条目中。
  2. 找到尺寸匹配后,请执行md5 hash check 来决定。
  3. 完成并执行任何必要的操作。

这几乎已经做到了。但是,我想知道其他足够快的选项是什么?

【问题讨论】:

    标签: file file-io operating-system checksum


    【解决方案1】:

    我想不出还有很多其他可供您选择的选择。

    请记住,md5 哈希检查(或任何其他计算)仅在您有预先存在的 md5 哈希检查(或其他一些计算)并且您希望合理地确保文件自您的预先存在的计算是最后完成的。

    用于合理保证的其他事项(使用预先存在的计算)是......

    1.  Inode and mount point IDs from the stat() family.
    2.  mtime comparisons for info on when the file was last modified.
    

    否则,您只能在两个文件之间进行直接的逐字节比较。

    【讨论】:

    • 哈希检查将始终是后备方法,我会检查第一个选项,但 mtime 实际上并没有真正说明两者是否相同。例如我可能在不同时间下载了相同的 iso 文件,但 mtime 会错误地报告,就好像文件不同一样。
    • @fastreload:当使用哈希检查时(因为您有一个哈希值和一个文件),您实际上是在检查文件是否映射到哈希值。如果您有两个文件,如果您只关心文件是否相同,那么使用哈希是没有意义的——如果更快,则直接进行字节比较。您对 mtime 的看法是正确的,尽管在一些特殊(有限)情况下,它仍然可以证明是有用的,这就是我包含它的原因。
    • 字节到字节的比较比较快,但实际上并没有太大区别,因为它们大多是io密集型进程,在哈希检查中,cpu会等待io大部分时间来读取和缓冲;它不会有很大的不同。但是,如果有超过 2 个相同的文件,哈希检查会更快。我可以将 md5 条目放入数据库,对于第三场比赛,我只会read 1 个文件,而不是读取两个文件。我不能将所有字节都写入数据库,你知道 =)
    猜你喜欢
    • 2010-11-24
    • 2023-03-16
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2010-12-18
    • 2012-08-23
    相关资源
    最近更新 更多