Windows 上有没有类似于 inotify 的东西?

在 Linux 操作系统中,有一个 inotify 子系统,它通知应用程序文件系统的更改。

但是,我主要是一个 Windows 用户,所以我想知道是否有类似的方法来监视文件系统的变化?

58202 次浏览

我做了一点搜索,我似乎记得看到一些类似的 Windows。有 用于.NET 的 FileSystemWatcher ,主要用于 NT 或 XP 和转发。

JNotify or FileMon from Microsoft.

如果你正在使用 。网,使用 FileSystemWatcher。更多信息在这里: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

如果你正在使用 C,使用 FindFirstChangeNotificationFindNextChangeNotificationReadDirectoryChangesW。更多信息在这里: http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx

OSX上,相关的 api 是 fsevents api。

它们彼此之间都有细微的差别,在边缘情况下,它们的可靠性都值得怀疑。通常,您不能100% 地依赖这些 api 来获得所有更改的完整视图。大多数使用文件系统监视的人将它与定期扫描结合起来,以弥补 push api 中丢失或不完整的信息。

FileSystemWatcher ()是不可靠的,主要是因为它对观察者缓冲区的错误处理或多或少是不完整的。由于缺少路径和详细的错误处理信息,微软无法恢复或手动轮询工作目录。

JNotify for Windows 也是不可靠的,因为这个 bug ^ 来自 win32。JNotify 使用 win32。因此,它与 FileSystemWatcher ()没有什么不同。

有点晚了,但是..。

Windows 具有类似于 OSX 事件的功能,可以在不运行应用程序的情况下监视事件。WindowsUSNJournal 跟踪所有文件更改。 Jeffrey Richter (Advanced Windows 的作者)为 MSDN Journal 编写了一个带有工作示例的 很棒的文章更新: 由于 MSJ 不再在 MS 上线,文章现在来自 archive. org。

USN 更改日志的 MSDN 文档。

如果您正在构建需要监视整个卷的备份工具或索引等应用程序,那么 USN 更改日志可能更好。