在 Linux 操作系统中,有 inotify 子系统,用于通知应用程序文件系统的更改。
但是,我主要是 Windows 用户,所以我想知道是否有类似的方法来监视文件系统更改?
如果您使用 .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。
它们彼此之间都有细微的不同,并且在边缘情况下它们的可靠性都值得怀疑。一般来说,您不能 100% 依赖这些 api 来获取所有更改的完整视图。大多数使用文件系统监控的人将其与定期扫描相结合,以补偿推送 API 中丢失或不完整的信息。
请参阅 FindFirstChangeNotification API,或 .NET 对应部分 FileSystemWatcher
FileSystemWatcher() 不可靠,主要是因为它对观察者缓冲区的错误处理或多或少不完整。由于缺乏路径和详细的错误处理信息,Microsoft 无法让您恢复或手动轮询工作目录。
Windows 的 JNotify 也不可靠,因为这个 bug ^ 源自 win32。 JNotify 使用 win32。所以,它与 FileSystemWatcher() 没有什么不同。
我做了一些搜索,我似乎记得在 Windows 上看到过类似的东西。有 适用于 .NET 的FileSystemWatcher。主要针对 NT 或 XP 及以后版本。
很晚的答案可能会对某人有所帮助-
根据 Peter Krnjevic 的评论,请查看 FOSS 工具“Everything”。
这使用 NTFS USN 日志在整个文件系统中按文件名提供“即时搜索”。搜索结果随着新文件的写入而实时更新。通过适当的索引选择,您还可以快速搜索在任何选定时间范围内创建/更新的文件。
该工具有一个 GUI,但还有一个命令行工具和一个与后台服务通信的 API。
对于 NTFS,这是一个全面的文件系统监控解决方案。
最糟糕的是应用程序名称,没有人会想到去搜索..