Есть что-то вроде inotify в Windows?

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

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

Ответ 2

Если вы используете .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(VS.85).aspx

В OSX соответствующий api - это fsevents api.

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

Ответ 5

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

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

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

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

Ответ 6

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

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

Ответ 7

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