Сведения о вопросе

MAT

00:14, 26th August, 2020

Теги

c   windows   winapi   file   notifications    

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

Просмотров: 470   Ответов: 4

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



  Сведения об ответе

LIZA

00:10, 23rd August, 2020

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

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

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


  Сведения об ответе

PIRLO

07:42, 9th August, 2020

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


  Сведения об ответе

repe

09:47, 22nd August, 2020

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


  Сведения об ответе

appple

21:00, 14th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться