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

StackOverflow https://stackoverflow.com/questions/16615

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top