Windows 上有类似 inotify 的东西吗?

问题描述 投票:0回答:9

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

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

windows inotify
9个回答
51
投票

如果您使用 .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 中丢失或不完整的信息。


39
投票

请参阅 FindFirstChangeNotification API,或 .NET 对应部分 FileSystemWatcher



12
投票

有点晚了但是...

Windows 具有类似于 OSX 事件的功能,您可以在不运行应用程序的情况下监视事件。 Windows USN 日志会跟踪所有文件更改。 Jeffrey Richter(《Advanced Windows》一书的作者)为 MSDN Journal 撰写了一篇很棒的文章,其中包含工作示例。 更新文章现在来自 archive.org,因为 MSJ 不再在 MS 在线。

USN 变更期刊的 MSDN 文档。

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


11
投票
来自 Microsoft 的

JNotifyFileMon


4
投票

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

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


1
投票

我做了一些搜索,我似乎记得在 Windows 上看到过类似的东西。有 适用于 .NET 的FileSystemWatcher。主要针对 NT 或 XP 及以后版本。


0
投票

0
投票

很晚的答案可能会对某人有所帮助-

根据 Peter Krnjevic 的评论,请查看 FOSS 工具“Everything”。

这使用 NTFS USN 日志在整个文件系统中按文件名提供“即时搜索”。搜索结果随着新文件的写入而实时更新。通过适当的索引选择,您还可以快速搜索在任何选定时间范围内创建/更新的文件。

该工具有一个 GUI,但还有一个命令行工具和一个与后台服务通信的 API。

对于 NTFS,这是一个全面的文件系统监控解决方案。

最糟糕的是应用程序名称,没有人会想到去搜索..

© www.soinside.com 2019 - 2024. All rights reserved.