目录校验和

Directory checksum

本文关键字:校验和      更新时间:2023-10-16

我有80个文件的目录,我想检查目录的校验和。

我想验证目录的内容是否与最新版本匹配。

我使用实时系统,因此需要高效。

我找到了一些文件检查功能。

我的问题是:我可以在不循环所有文件的情况下进行校验和目录吗?

一种可能的解决方案是维护一个特殊的(隐藏)文件,在该文件中,您可以在其中修改每个文件,并在更改文件时进行更新。然后将该文件的哈希作为目录的哈希。这不会阻止计算所有文件的校验和,而是在更改文件时减少工作量。如果您需要制作DIR的快照,那么您别无选择,但需要签到每个文件。

注意:您可以考虑避免加密哈希,除非您有很强的要求不能伪造它们。加密哈希相当缓慢且效率低下,这是故意的。

我不确定您的应用程序。MD5校验和通常用于精确度优于速度的情况(或给出犯规的其他障碍。)

在速度为king的构建系统中,文件约会通常用于评估目录平等。例如,给定最新目录是: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); })

实时示例

关于这个单线的一些注释:

  1. 这不是递归功能,它仅评估foobar
  2. 之内的日期
  3. 如果您使用目录,Visual Studio的last_write_time实现似乎与目录有问题
  4. 例如,在构建系统中,这比MD5校验和可以将lambda中的==更改为<具有巨大的优势