在 Linux 操作系统中,有一个 inotify 子系统,它通知应用程序文件系统的更改。
但是,我主要是一个 Windows 用户,所以我想知道是否有类似的方法来监视文件系统的变化?
我做了一点搜索,我似乎记得看到一些类似的 Windows。有 用于.NET 的 FileSystemWatcher ,主要用于 NT 或 XP 和转发。
请参阅 FindFirstChangeNotification API 或.NET 对应的 FileSystemWatcher 文件系统监视器
JNotify or FileMon from Microsoft.
如果你正在使用 。网,使用 FileSystemWatcher。更多信息在这里: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
FileSystemWatcher
如果你正在使用 C,使用 FindFirstChangeNotification,FindNextChangeNotification,ReadDirectoryChangesW。更多信息在这里: http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx
FindFirstChangeNotification
FindNextChangeNotification
ReadDirectoryChangesW
在 OSX上,相关的 api 是 fsevents api。
fsevents
它们彼此之间都有细微的差别,在边缘情况下,它们的可靠性都值得怀疑。通常,您不能100% 地依赖这些 api 来获得所有更改的完整视图。大多数使用文件系统监视的人将它与定期扫描结合起来,以弥补 push api 中丢失或不完整的信息。
take a look at this: Inotify-win,Windows 的 inotifywait 工具的一个端口
还有这个: Inotify-tools、一个 C 库和一组命令行程序,这些程序提供了一个用于 inotify 的简单接口
试试 Java 文件通知库
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 更改日志可能更好。