Какой самый быстрый способ проверить, изменились ли какие-либо файлы в дереве каталогов? - PullRequest
2 голосов
/ 24 марта 2011

В настоящее время я проверяю контрольную сумму XOR измененного времени файла (st_mtime из fstat) для каждого файла в дереве.Я связываю это с количеством найденных файлов и контрольной суммой размера файла (допускающей переполнение), чтобы быть безопасным, но я совершенно параноидален, что это может и приведет к ложным срабатываниям в самых крайних патологических случаях.

Один альтернативный (безопасный) вариант, который я рассматриваю, - это сохранение манифеста каждого файла по имени и CRC32 содержимого файла.Однако эта опция довольно медленная или медленнее, чем хотелось бы, по крайней мере, для многих файлов (скажем, тысяч).

Итак, вопрос в том, какие у вас есть советы или подсказки для определения того, имеет ли какой-либо файлизменилось в дереве каталогов?Я хотел бы избежать побайтового сравнения, не торгуя слишком много надежности.

Большое спасибо за ваши предложения.

1 Ответ

3 голосов
/ 24 марта 2011

Вы можете использовать свойство "последнее изменение включено", которое имеют файлы (независимо от платформы).

Просто сохраняйте исторические значения и сверяйте исторические значения с текущими значениями, очень часто.

boost :: filesystem имеет отличный кроссплатформенный API для чтения этого значения.

РЕДАКТИРОВАТЬ: Специально посмотреть на: http://www.pdc.kth.se/training/Talks/C++/boost/libs/filesystem/doc/operations.htm#last_write_time

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...