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


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

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

8 86

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 или FileMon из Microsoft.

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

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

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

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

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

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

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