Мне удалось заставить ReadDirectoryChangesW() работать с папками, которые мне нужно отслеживать. Я использую процедуру завершения ввода-вывода, и весь мониторинг изменений выполняется потоком, который ничего не делает, кроме ожидания изменений и сигнала об остановке. Все работает нормально. Подпрограмма завершения в настоящее время просто регистрирует измененное имя файла и действие из уведомляющей записи в системный журнал отладки. Опять вроде работает нормально. Во время тестирования жду всех доступных событий (маска 0x017F).

У меня вопрос: почему я НИКОГДА не вижу никаких событий изменения LAST WRITE, когда, скажем, Блокнот сохраняет измененный файл?

Изначально я ждал только событий FILE_NOTIFY_CHANGE_CREATION, _LAST_WRITE и _FILE_NAME и задавался вопросом, почему я никогда не видел последних событий записи (но я видел события _DIR_NAME, которых я НЕ ждал), поэтому я решил ждать всего.

В настоящее время мой код очень похож на тот, который я нашел здесь в качестве примера: ReadDirectoryChangesW

Во время отладки я использовал FindFirstFile(), чтобы получить копию WIN32_FIND_DATA до и после изменения отслеживаемого файла, чтобы убедиться, что время последней записи изменилось - так оно и было. Так почему без уведомления? Есть ли что-то особенное, что мне нужно сделать, чтобы включить это?

0
Steve Valliere 15 Окт 2019 в 18:03

1 ответ

Лучший ответ

Оказывается, я недостаточно читал документации. Я ошибочно предположил, что действие, данное подпрограмме завершения, будет использовать те же значения битовой маски, что и символы FILE_NOTIFY_CHANGE _ ***. В конце концов, имеет смысл вернуть только то, что я вложил, верно?

Неа. Подпрограмма завершения получает значение от 1 до 5 для действия для добавленного, удаленного, измененного, переименованного (старое имя), переименованного (новое имя). Для справки, настоящие названия символов похожи на FILE_ACTION_REMOVED.

Это разочаровывает, потому что все 5 из 8 объектов, которые можно отслеживать, станут FILE_ACTION_MODIFIED, в то время как оставшиеся 3 объекта, которые можно отслеживать, соответствуют оставшимся 4 символам FILE_ACTION.

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

0
Steve Valliere 15 Окт 2019 в 15:24