使用Linux操作系统,有一个ionotify子系统可以通知应用程序文件系统的更改。
但是,我主要是一个Windows用户,所以我想知道是否有类似的方法来监控文件系统的变化?
答案 0 :(得分:42)
如果您使用的是 .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。
它们彼此之间略有不同,在边缘情况下它们都具有可疑的可靠性。一般而言,您无法依赖这些api来100%全面查看所有更改。大多数使用文件系统监控的人将其与定期扫描相结合,以补偿来自push api的丢失或不完整的信息。
答案 1 :(得分:32)
请参阅FindFirstChangeNotification API或.NET对应FileSystemWatcher
答案 2 :(得分:23)
答案 3 :(得分:11)
答案 4 :(得分:10)
有点晚了但是......
Windows具有与OSX事件类似的功能,您可以在不运行应用程序的情况下监控事件。 Windows USN Journal会跟踪所有文件更改。 Jeffrey Richter(Advanced Windows的作者)为MSDN Journal撰写了terrific article的工作样本。
如果您正在构建需要监控整个卷的备份工具或索引等应用程序,那么USN Change Journals可能会更好。答案 5 :(得分:3)
FileSystemWatcher()不可靠主要是因为它对观察程序缓冲区的错误处理或多或少不完整。由于缺少路径和详细的错误处理信息,Microsoft无法恢复或手动轮询工作目录。
JNotify for Windows也不可靠,因为这个bug来自win32。 JNotify使用win32。所以,它与FileSystemWatcher()没有区别。
答案 6 :(得分:1)
我做了一些搜索,我似乎记得看到类似于Windows的东西。有 对于.NET,FileSystemWatcher。它主要用于NT或XP和前进。
答案 7 :(得分:0)