我有80个文件的目录,我想检查目录的校验和。
我想验证目录的内容是否与最新版本匹配。
我使用实时系统,因此需要高效。
我找到了一些文件校验和功能。
我的问题是:我可以在没有循环所有文件的情况下对目录进行校验和吗?
答案 0 :(得分:2)
一种可能的解决方案是维护一个特殊(隐藏)文件,在该文件中保留每个文件的修改日期时间和哈希值,并在文件更改时更新它。然后将该文件的哈希值作为目录的哈希值。这不会阻止计算所有文件的校验和,但会减少文件更改时的工作量。如果你需要制作目录的快照,那么你没有选择,但需要按特定顺序校验每个文件。
注意:您可以考虑避免加密哈希,除非您强烈要求它们不能伪造。加密哈希是相当缓慢和低效的,而且是故意的。
答案 1 :(得分:0)
我不确定你的申请。 md5校验和通常用于精度优于速度的情况下(或者为犯规游戏提供额外的障碍。)
在速度为王的构建系统中,文件约会通常用于评估目录相等性。例如,鉴于最新目录为:filesystem::path foo
,相关目录为:filesystem::path bar
您可以简单地评估:
equal(filesystem::directory_iterator(foo), filesystem::directory_iterator(), filesystem::directory_iterator(bar), filesystem::directory_iterator(), [](const auto& lhs, const auto& rhs) { return filesystem::last_write_time(lhs) == filesystem::last_write_time(rhs); })
关于这个单行的几点说明:
foo
和bar
last_write_time
seems to have an issue with directories ==
更改为<
如果你手动更新了一个,那么一个班轮仍然会肯定地回复的文件到较新的测试版本