Есть ли что-то вроде inotify на Windows?

с ОС Linux существует подсистема ionotify, которая уведомляет приложение об изменениях в файловой системе.

однако я в основном пользователь Windows, поэтому мне было интересно, есть ли аналогичный способ отслеживать изменения файловой системы?

8 ответов


посмотреть FindFirstChangeNotification API или .NET-аналог FileSystemWatcher


если вы используете .net, Используйте FileSystemWatcher. Подробнее здесь: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

если вы используете C используйте FindFirstChangeNotification, FindNextChangeNotification, ReadDirectoryChangesW. Подробнее здесь: http://msdn.microsoft.com/en-us/library/aa365261(против.85).аспн

On OSX, соответствующий api является fsevents API-интерфейс.

все они слегка отличаются друг от друга, и все они имеют сомнительную надежность в крайних случаях. В общем, вы не можете зависеть от этих API для полного представления всех изменений 100% времени. Большинство людей, использующих мониторинг файловой системы, объединяют его с периодическим сканированием для компенсации потерянной или неполной информации из Push api.



JNotify или Филимон из Microsoft.


немного поздно, но ...

Windows имеет средство, подобное событиям OSX, с помощью которого вы можете отслеживать события без запуска приложения. Журнал Windows USN отслеживает все изменения файлов. Джеффри Рихтер (автор Advanced Windows) написал потрясающая статья с рабочими образцами для журнала MSDN.

документация MSDN для журналов изменений USN.

журналы изменений USN, вероятно, лучше, если вы создаете приложения, такие как инструменты резервного копирования или индексы, необходимые для мониторинга целых томов.


FileSystemWatcher () ненадежен в основном из-за того, что обработка ошибок для буфера наблюдателя более или менее неполная. Из-за отсутствия пути и подробной информации об обработке ошибок Microsoft не дает вам возможности восстановить или вручную опросить рабочий каталог.

JNotify для Windows также ненадежен, потому что эта ошибка ^ происходит от win32. JNotify использует win32. Таким образом, это ничем не отличается от FileSystemWatcher().


Я немного поискал, кажется, я помню, что видел что-то подобное для Windows. Есть FileSystemWatcher for .Сеть. Его в основном для NT или XP и вперед.