Как сравнить две папки с помощью CRC32 в Visual C++?

Я создаю приложение Win32. Запустив программу, она перезагрузит некоторые данные из определенной папки. Но я не хочу перезагружаться, если в папке нет изменений.

Поэтому мне нужно сохранить контрольную сумму папки для сравнения двух папок (текущей и предыдущей версии).

Как получить значение контрольной суммы из папки?


person Fame th    schedule 07.05.2020    source источник
comment
Чтобы вычислить контрольную сумму папки, вам придется перечитать всю папку, что противоречит цели предотвращения перезагрузки данных.   -  person user7860670    schedule 07.05.2020
comment
Нет такого понятия, как контрольная сумма папки. Чего вы на самом деле пытаетесь достичь? Это очень похоже на проблему XY.   -  person Jabberwocky    schedule 07.05.2020
comment
Если есть встроенная функциональность, поддерживающая это в Windows, то это для меня новость. Между прочим, наличие идентичных CRC32 не гарантирует, что два файла идентичны.   -  person 500 - Internal Server Error    schedule 07.05.2020
comment
Из любопытства... Предположим, вы храните CRC32 для папки в отдельном файле с зарезервированным именем. Как вы узнаете, действительна ли она по-прежнему или стала грязной из-за того, что файлы в этой папке были изменены, удалены или добавлены?   -  person Scheff's Cat    schedule 07.05.2020
comment
Кажется, Windows каким-то образом кэширует миниатюры для папок. Судя по моему личному опыту, у него есть механизм обновления миниатюр при необходимости. Однако я также достаточно часто видел, что этот механизм время от времени дает сбой, и мне приходилось обновлять вручную (например, в проводнике, нажав [F5]).   -  person Scheff's Cat    schedule 07.05.2020
comment
@Scheff Я забыл кое-что сказать. После того, как я смогу получить результат CRC32. Я оставлю это на сервере. Таким образом, они будут отделены от интересной папки.   -  person Fame th    schedule 07.05.2020
comment
@Fameth, пожалуйста, отредактируйте свой вопрос и поместите всю необходимую информацию в вопрос. Я тоже все еще жду ответа на свой предыдущий комментарий   -  person Jabberwocky    schedule 07.05.2020
comment
Однако это не меняет моих опасений. ;-) Альтернативой может быть запоминание временных меток последней модификации файлов папки (или использование их каким-либо образом для контрольной суммы CRC32). Так, по крайней мере, вам не нужно перечитывать все содержимое папки байт за байтом...   -  person Scheff's Cat    schedule 07.05.2020
comment
У меня есть два вопроса. 1. Какие данные вам нужны из конкретной папки? 2. Какие изменения в папке?   -  person Strive Sun    schedule 08.05.2020
comment
Вы можете сравнить две папки один раз, а затем сохранить временные метки всех файлов. Затем для последующих проверок вам нужно только проверить метки времени, чтобы увидеть, был ли файл изменен. Если бит архива не нужен для других программ, вы можете очистить бит архива для каждого файла и искать файлы с установленным битом архива. При использовании Windows это можно сделать с помощью командной строки консоли dir /Aa /s. Такие программы, как Windiff, сравнивают два дерева каталогов и предлагают возможность копирования новых файлов для замены старых файлов.   -  person rcgldr    schedule 12.05.2020
comment
Окольный метод для достижения того, что вы пытаетесь сделать, но этот ответ может предоставить некоторые полезные элементы для обнаружения в зависимости от того, насколько вы контролируете то, что происходит в папках, которые могут быть изменены: Правила для «Даты изменения» папок в проводнике Windows   -  person Phil Brubaker    schedule 12.05.2020