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