目录校验和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目录校验和相关的知识,希望对你有一定的参考价值。
我有80个文件的目录,我想检查目录的校验和。
我想验证目录的内容是否与最新版本匹配。
我使用实时系统,所以它需要高效。
我找到了一些文件校验和功能。
我的问题是:我可以在没有循环所有文件的情况下对目录进行校验和吗?
答案
一种可能的解决方案是维护一个特殊(隐藏)文件,您可以在其中保留每个文件的修改日期时间和哈希值,并在文件更改时更新它。然后将该文件的哈希值作为目录的哈希值。这不会阻止计算所有文件的校验和,但会减少文件更改时的工作量。如果您需要创建目录的快照,那么您没有选择,但需要按特定顺序校验每个文件。
注意:您可以考虑避免加密哈希,除非您强烈要求它们不能伪造。加密哈希是相当缓慢和低效的,这是故意的。
另一答案
我不确定你的申请。 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
中的日期 - 如果你正在使用目录,Visual Studio's implementation of
last_write_time
seems to have an issue with directories - 例如,在构建系统中,这比md5校验和具有巨大优势,我可以将lambda中的
==
更改为<
,如果您已将其中一个文件手动更新为较新的测试版本,则一个班轮仍将肯定地回复
以上是关于目录校验和的主要内容,如果未能解决你的问题,请参考以下文章
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途
SpringBoot - 使用Assert校验让业务代码更简洁