У вас есть 2 проблемы для решения здесь.
Первое, если вы хотите отслеживать динамические изменения (сделанные во время работы вашей программы). В этом случае вам нужно использовать Windows API ReadDirectoryChangesW. Есть много примеров того, как его использовать. (Осторожно ... некоторые примеры не очень хороши. Этот вызов API МОЖЕТ и будет возвращать более одного события для каждого вызова, и вам необходимо внимательно прочитать интерфейс, понять, как он работает, и обработать ВСЕ, что возвращается.
Вторая проблема - если у вас есть папка или список папок, и вы хотите проверить, изменилось ли их / их содержимое - путем добавления / удаления или изменения файлов в этой папке.
В этом случае наиболее эффективным методом является одновременное чтение содержимого папки по имени файла и накопительный хэш. Более того, вы также хотите получить атрибуты (используя что-то вроде GetFileAttributesEx) и включить их в хеш. (обязательно исключите папки "." и ".." - иначе результаты будут вводить в заблуждение.)
Причина этого заключается в том, что вы хотите отследить изменения в файле по его размеру, датам и т. Д. Однако вы, вероятно, не хотите включать время LastAccessed.
Любая большая хеширующая функция должна подойти. В результате получается одно большое число (хеш) для каждой папки.
Затем, когда вы делаете еще один проход, вы заново вычисляете хеш и сравниваете с сохраненным хешем последнее известное состояние этой папки. Если хэши не совпадают, вам нужно подробно просмотреть папку.
По сути, этот подход говорит вам (быстро), что здесь есть кое-что, что вам нужно рассмотреть более подробно, и то, как вы это делаете, зависит от того, чего вы пытаетесь достичь.
Преимущество этого в том, что вы смотрите не на содержимое каждого файла в папке, а на некоторые метаданные, которые дают вам достаточно указаний. Таким образом, обработка выполняется во много тысяч раз быстрее.