Answers:
请参阅FindFirstChangeNotification API或与.NET对应的FileSystemWatcher
如果您使用的是.net,请使用FileSystemWatcher
。此处的更多信息:http : //msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher.aspx
如果您使用Ç,使用FindFirstChangeNotification
,FindNextChangeNotification
,ReadDirectoryChangesW
。此处的更多信息:http : //msdn.microsoft.com/zh-cn/library/aa365261(VS.85).aspx
在OSX上,相关的api是fsevents
api。
它们彼此之间都存在细微的差异,并且在极端情况下都具有可疑的可靠性。通常,您不可能100%地依靠这些api来完整查看所有更改。大多数使用文件系统监视的人都将它与定期扫描结合起来,以补偿来自推送api的丢失或不完整的信息。
有点晚但是...
Windows具有类似于OSX事件的功能,您可以在不运行应用程序的情况下监视事件。Windows USN Journal会跟踪所有文件更改。Jeffrey Richter(Advanced Windows的作者)写了一篇很棒的文章,其中包含有关MSDN Journal的工作示例。更新:文章从archive.org现在因为MSJ不再在网上MS。
如果您要构建需要监视整个卷的应用程序(例如备份工具或索引),则USN更改日志可能会更好。
FileSystemWatcher
| 的错误行为?FindFirstChangeNotification
PhillipBrandonHolmes在说什么?
FileSystemWatcher()之所以不可靠,主要是因为对watcher缓冲区的错误处理或多或少是不完整的。由于缺少路径和详细的错误处理信息,Microsoft无法为您提供恢复或手动轮询工作目录的方法。
Windows的JNotify也不可靠,因为此bug ^源自win32。JNotify使用win32。因此,它与FileSystemWatcher()没有什么不同。
我做了一些搜索,似乎还记得有类似的Windows版本。有用于.NET 的 FileSystemWatcher。其主要用于NT或XP及更高版本。