【发布时间】:2011-03-23 22:16:05
【问题描述】:
目前,我正在检查树中每个文件的修改文件时间(来自 fstat 的 st_mtime)的 XOR 校验和。我将它与找到的文件数量和文件大小校验和(允许溢出)结合起来是安全的,但我非常偏执地认为这会在最极端的病理情况下导致误报。
我正在考虑的一个替代(安全)选项是按名称和文件内容的 CRC32 保留每个文件的清单。但是,此选项非常慢,或者至少比我想要的许多文件(比如说数千个文件)要慢。
所以问题是,您可能有哪些技巧或窍门来确定目录树中的任何文件是否已更改?我想避免逐字节比较而不牺牲太多可靠性。
非常感谢您的建议。
【问题讨论】:
-
程序运行期间还是自上次运行以来?
-
tstenner:如果我自上次运行以来正确理解您的问题。给定一个文件信息数据库,我想知道是否应该在给定的持续时间后仅使用数据库信息作为参考来更新该数据库。
-
至少,如果您想(可能)发现日期戳集合中的更改,那么请对数据集进行适当的校验和,而不仅仅是 XOR。如果您担心
readdir返回文件的顺序是否会改变,即使文件系统没有改变,您可以先对每个目录中的文件进行排序(并在遍历期间对目录进行排序)。例如,假设我删除了两个具有相同时间戳的文件,并创建了两个具有另一个时间戳的文件,如果它们是临时文件,则完全合理。您的“文件数和时间戳的 XOR”指标没有发现这一点。
标签: c++ file search last-modified