Справочная контрольная сумма

У меня есть каталог с 80 файлами, я хочу проверить контрольную сумму каталога.

Я хочу убедиться, что содержимое каталога соответствует последней версии.

Я работаю с системой реального времени, поэтому она должна быть эффективной.

Я нашел некоторую функцию контрольной суммы файла.

Мой вопрос: могу ли я сделать контрольную сумму для каталога без зацикливания всех файлов?

0

Решение

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

Примечание: вы можете избежать крипто-хэшей, если у вас нет строгих требований, чтобы они не могли быть подделаны. Крипто хеши довольно медленные и неэффективные, и это специально.

2

Другие решения

Я не уверен в вашем заявлении. Контрольная сумма 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); })

Живой пример

Несколько замечаний об этой однострочнике:

  1. Это не рекурсивная функция, она оценивает только даты в пределах foo а также bar
  2. если ты являются работа с каталогами, Реализация Visual Studio last_write_time кажется, есть проблема с каталогами
  3. Например, в системе сборки это имеет огромное преимущество перед контрольной суммой md5, что я могу изменить == в лямбду к < один лайнер по-прежнему будет отвечать утвердительно, если вы вручную обновили один из файлов до более новой тестовой версии
0

По вопросам рекламы [email protected]