FindFirstChangeNotification - лучший API для использования для уведомления об изменении файловой системы в Windows?

Я новичок в программировании Windows и пытаюсь получать уведомления обо всех изменениях в файловой системе (аналогично информации, отображаемой FileMon из SysInternals, но через API). Является ли FindFirstChangeNotification для каждого (несетевого, несетевого) моим лучшим выбором или есть другие более подходящие API C / C++?

Ответов (4)

Решение

FindFirstChangeNotification это нормально, но для немного большей максимальной мощности вы должны использовать ReadDirectoryChangesW. (на самом деле, это даже рекомендуется в документации!)

Он не требует указателя на функцию, он требует, чтобы вы вручную декодировали необработанный буфер, он использует имена файлов Unicode, но, как правило, он лучше и гибче.

С другой стороны, если вы хотите делать то, что делает FileMon, вам, вероятно, следует сделать то же, что и FileMon, и использовать IFS для создания и установки фильтра файловой системы .

На самом деле FileSystemWatcher отлично работает с общими сетевыми дисками. Я использую его прямо сейчас в приложении, которое, помимо прочего, отслеживает изменения файловой системы. (www.tabbles.net).

Есть и другие способы сделать это, но большинство из них требует усилий с вашей стороны (или зависит от производительности вашего приложения, или вам нужно заблокировать поток, чтобы использовать их, и т. Д.). FindFirstChangeNotification немного сложен, если вы не привыкли иметь дело с указателями на функции и т. Д., Но он имеет то преимущество, что заставляет ОС делать большую часть работы за вас.

Вы можете использовать класс FileSystemWatcher. Очень эффективен, но не может работать с общими сетевыми дисками.