2008-08-19 8 views
17

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

ответ

22

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

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

С другой стороны, если вы хотите делать то, что делает FileMon, вероятно, вы должны сделать то, что делает FileMon, и использовать IFS to create and install a file system filter.

+0

В конце концов я пошел на ReadDirectoryChangesW и получал удовольствие от разработки того, как преобразовать буфер, возвращенный в форму, которую я мог бы передать обратно на свой Java-код, но он определенно делает то, что я хочу. – 2008-09-14 23:23:54

0

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

-1

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^