Мне удалось заставить ReadDirectoryChangesW()
работать с папками, которые мне нужно отслеживать. Я использую процедуру завершения ввода-вывода, и весь мониторинг изменений выполняется потоком, который ничего не делает, кроме ожидания изменений и сигнала об остановке. Все работает нормально. Подпрограмма завершения в настоящее время просто регистрирует измененное имя файла и действие из уведомляющей записи в системный журнал отладки. Опять вроде работает нормально. Во время тестирования жду всех доступных событий (маска 0x017F).
У меня вопрос: почему я НИКОГДА не вижу никаких событий изменения LAST WRITE, когда, скажем, Блокнот сохраняет измененный файл?
Изначально я ждал только событий FILE_NOTIFY_CHANGE_CREATION, _LAST_WRITE и _FILE_NAME и задавался вопросом, почему я никогда не видел последних событий записи (но я видел события _DIR_NAME, которых я НЕ ждал), поэтому я решил ждать всего.
В настоящее время мой код очень похож на тот, который я нашел здесь в качестве примера: ReadDirectoryChangesW а>
Во время отладки я использовал FindFirstFile()
, чтобы получить копию WIN32_FIND_DATA до и после изменения отслеживаемого файла, чтобы убедиться, что время последней записи изменилось - так оно и было. Так почему без уведомления? Есть ли что-то особенное, что мне нужно сделать, чтобы включить это?
1 ответ
Оказывается, я недостаточно читал документации. Я ошибочно предположил, что действие, данное подпрограмме завершения, будет использовать те же значения битовой маски, что и символы FILE_NOTIFY_CHANGE _ ***. В конце концов, имеет смысл вернуть только то, что я вложил, верно?
Неа. Подпрограмма завершения получает значение от 1 до 5 для действия для добавленного, удаленного, измененного, переименованного (старое имя), переименованного (новое имя). Для справки, настоящие названия символов похожи на FILE_ACTION_REMOVED
.
Это разочаровывает, потому что все 5 из 8 объектов, которые можно отслеживать, станут FILE_ACTION_MODIFIED
, в то время как оставшиеся 3 объекта, которые можно отслеживать, соответствуют оставшимся 4 символам FILE_ACTION.
Я собираюсь оставить свой глупый вопрос на случай, если у других возникнет аналогичная проблема.
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.