在Windows上有没有像inotify?
在Linux操作系统中,有一个ionotify子系统,用于通知应用程序对文件系统的更改。
但是,我主要是一个Windows用户,所以我想知道是否有一个类似的操作系统API来监视文件系统的变化?
请参阅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(VS.85).aspx
在OSX上 ,相关的api是fsevents
api。
它们之间有着微妙的差异,在边缘情况下它们都有可疑的可靠性。 一般来说,您不能依赖这些apis来全面了解所有时间的变化。 大多数使用文件系统监视的人将其与定期扫描结合起来,以弥补推送API中丢失或不完整的信息。
看看这个: inotify-win,Windows的inotifywait工具的一个端口
还有这个: inotify-tools
来自Microsoft的JNotify或FileMon 。
有点晚了,但…
Windows具有类似于OSX事件的function,因此您可以在不运行应用程序的情况下监视事件。 Windows USN日记logging了所有文件更改。 Jeffrey Richter(Advanced Windows的作者)为MSDN Journal撰写了一篇非常棒的文章 。
USN更改日记帐的MSDN文档。
USN Change Journals可能会更好,如果您正在构build像备份工具或需要监视整个卷的索引的应用程序。
FileSystemWatcher()是不可靠的,主要是因为它的观察者缓冲区的error handling或多或less是不完整的。 由于缺lesspath和详细的error handling信息,Microsoft不允许您恢复或手动轮询工作目录。
Windows的JNotify也是不可靠的,因为这个bug来源于win32。 JNotify使用win32。 所以,它和FileSystemWatcher()没有区别。
我做了一些search,我似乎记得看到类似的Windows的东西。 有.NET的FileSystemWatcher 。 它主要用于NT或XP并转发。
尝试Java文件通知库