Мне удалось заставить ReadDirectoryChangesW()
работать для папок, которые нужно отслеживать. Я использую подпрограмму IO Completion, и весь мониторинг изменений выполняется потоком, который ничего не делает, кроме ожидания изменений и сигнала для остановки. Это все работает отлично. Процедура завершения в настоящее время просто регистрирует измененное имя файла и действие из записи уведомления в системный журнал отладки. Опять же, похоже, работает нормально. Во время тестирования я жду всех доступных событий (маска 0x017F).
У меня такой вопрос: почему я НИКОГДА не вижу никаких событий изменения ПОСЛЕДНЕГО ЗАПИСИ, когда, скажем, Блокнот сохраняет измененный файл?
Изначально я ждал только событий FILE_NOTIFY_CHANGE_CREATION, _LAST_WRITE и _FILE_NAME и удивлялся, почему я никогда не видел последних событий записи (но я действительно видел события _DIR_NAME, которых я НЕ ожидал), поэтому я решил подождать всего.
Мой код в настоящее время очень похож на то, что я нашел здесь в качестве примера: ReadDirectoryChangesW
Во время отладки я использовал FindFirstFile()
, чтобы получить копию WIN32_FIND_DATA до и послеизменив отслеживаемый файл, чтобы убедиться, что изменилось время последней записи - это произошло. Так почему нет уведомления? Что-то особенное, что мне нужно сделать, чтобы включить это?