106

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

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

4

8 回答 8

44

如果您使用的是.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 是fseventsapi。

它们彼此之间都有微妙的不同,并且在极端情况下它们的可靠性都值得怀疑。通常,您不能 100% 地依赖这些 api 来获得所有更改的完整视图。大多数使用文件系统监控的人将其与定期扫描相结合,以弥补推送 API 中丢失或不完整的信息。

于 2010-08-18T23:32:04.733 回答
37

请参阅FindFirstChangeNotification API 或 .NET 对应的FileSystemWatcher

于 2010-08-18T23:13:15.577 回答
23

看看这个:inotify-win,一个用于 Windows 的 inotifywait 工具的端口

还有这个:inotify-tools

于 2013-01-10T10:48:10.330 回答
11

来自 Microsoft 的JNotifyFileMon 。

于 2010-08-18T23:13:24.320 回答
10

有点晚了,但是...

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

USN 更改日志的 MSDN 文档。

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

于 2013-07-17T02:49:16.893 回答
3

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

Windows 的 JNotify 也不可靠,因为此错误 ^ 源自 win32。JNotify 使用 win32。因此,它与 FileSystemWatcher() 没有什么不同。

于 2013-07-15T17:34:07.450 回答
1

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

于 2010-08-18T23:12:38.557 回答
0

试试Java 文件通知库

于 2013-03-05T10:54:41.277 回答