Является ли FindFirstChangeNotification лучшим API для уведомления об изменении файловой системы в Windows?
-
08-06-2019 - |
Вопрос
Я новичок в программировании для Windows и пытаюсь получать уведомления обо всех изменениях в файловой системе (аналогично информации, которую отображает FileMon из SysInternals, но через API).Является ли FindFirstChangeNotification для каждого (несетевого, незамещенного) диска лучшим выбором или существуют другие, более подходящие API C/C++?
Решение
FindFirstChangeNotification
это нормально, но для немного большей предельной мощности вам следует использовать ReadDirectoryChangesW.
(На самом деле, это даже рекомендуется в документации!)
Он не требует указателя на функцию, требует ручного декодирования необработанного буфера, использует имена файлов в Юникоде, но в целом он лучше и гибче.
С другой стороны, если вы хотите делать то же, что делает FileMon, вам, вероятно, следует делать то же, что делает FileMon, и использовать IFS для создания и установки фильтра файловой системы.
Другие советы
Есть и другие способы сделать это, но большинство из них требуют усилий с вашей стороны (или забирают производительность вашего приложения, или вам приходится блокировать поток, чтобы использовать их, и т. д.).FindFirstChangeNotification немного сложен, если вы не привыкли иметь дело с указателями на функции и т. д., но его достоинство заключается в том, что ОС делает большую часть работы за вас.
На самом деле FileSystemWatcher прекрасно работает с общими сетевыми дисками.Я использую его прямо сейчас в приложении, которое, помимо прочего, отслеживает изменения файловой системы.(www.tabbles.net).
Вы можете использовать класс FileSystemWatcher.Очень эффективен, но не может работать с общими сетевыми дисками.