Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上有类似inotify的东西吗?_Windows_Inotify - Fatal编程技术网

Windows上有类似inotify的东西吗?

Windows上有类似inotify的东西吗?,windows,inotify,Windows,Inotify,在Linux操作系统中,有一个ionotify子系统,它将文件系统的更改通知应用程序 但是,我主要是Windows用户,所以我想知道是否有类似的方法来监视文件系统的更改?我做了一些搜索,我似乎记得在Windows上看到过类似的东西。有 对于.NET。它主要用于NT或XP和forward。请参阅API,或.NET的对应版本或Microsoft。如果您使用的是.NET,请使用FileSystemWatcher。更多信息请点击此处: 如果您使用的是C,请使用FindFirstChangeNotific

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


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

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

请参阅API,或.NET的对应版本

或Microsoft。

如果您使用的是.NET,请使用
FileSystemWatcher
。更多信息请点击此处:

如果您使用的是C,请使用
FindFirstChangeNotification
FindNextChangeNotification
ReadDirectoryChangesW
。更多信息请点击此处:

在OSX上,相关的api是
fsevents
api

它们彼此之间都有细微的差别,而且在边缘案例中它们的可靠性都值得怀疑。一般来说,您不能100%依赖这些API来查看所有更改的完整视图。大多数使用文件系统监控的人都会将其与定期扫描相结合,以补偿推送api中丢失或不完整的信息。

请看以下内容:

还有一点:

try

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

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

有点晚了,但是

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


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

请您在“inotify在边缘情况下的可靠性有问题吗?如果fs watcher api的使用者在读取事件时比其他进程在生成事件时慢,那么内核要么需要在其他(可能更高优先级)进程中保留文件系统修改,要么允许缓冲区无限增长。inotify的缓冲区深度(如手册页中所述)由/proc/sys/fs/inotify/max_queued_事件控制。除此之外,您会收到一个IN_Q_溢出通知——这很好,但您仍然需要不时重新扫描。啊哈,对了,我最近正在阅读队列。我认为这种边缘情况将取决于您监视的文件数量,还取决于跟踪所有更改是否至关重要,或者是否会遗漏一些更改。但这是一个很好的观点。谢谢:)@blucz我很好奇内核人是如何解决这些问题的。很高兴知道他们这么做了,这让人对设计和实现更有信心。JNotify非常适合我,因为我需要跨平台的兼容性。我甚至可以编写一个bash脚本,在cygwin、mac和linux中运行,前提是JAVA_HOME设置正确。这对调试客户机器上的问题有很大的帮助,当他们说“它删除了我的文件!”时,我实际上可以查看日志并试图找出这是如何发生的/何时发生的。FileMon现在正在ProcessMonitor思考如何设计角色来解决这个类似“速度”/“竞争”/“溢出”的问题,我想知道内核是如何做到的。有趣。网络和日志也会发生这种情况。这个问题有名字吗?是的,它的名字是“bug”。迄今为止,微软创建的每一个操作系统都留下了漏洞(win32)。这使得任何Microsoft操作系统都不适合文件监视类型的解决方案。你必须放弃才能完成它。有时候我觉得他们出于安全考虑故意让缓冲区溢出。哈哈。。是 啊它的名字是故意群集乱码,所以微软的文件系统不能被故意监视。这是他们出于安全考虑留下的一个bug。USN日志的方式有什么不同吗?依赖它可以避免
FileSystemWatcher
|
FindFirstChangeNotification
的bug行为吗?我已经有一段时间没有使用它了,但它没有使用FileSystemWatcher或FindFirstChangeNotification。我开始在Go中编写Windows事件观察器,主要基于Jeffery Richter的示例。从我做的测试来看,它坚如磐石,没有遗漏任何东西,类似于OS X中的fsevents。要点如下:@PeterKrnjevic你能更新Jeffrey Richter文章的链接吗?@SOUser,由于bitrot女士的原因,这篇文章现在是从archive.org链接的。我不认为这些问题是离题的。这个问题需要一个与任何工具/软件库都大不相同的操作系统API。可能它的措辞会有所不同,比如当特定文件被修改时,如何在windows应用程序中得到通知。投票重新打开:问题是要求提供一个与特定操作系统API类似的替代方案,并以类似的方式阅读“我来自英国,在那里我用叉子吃饭,在日本,我用什么样的器具来吃类似的食物?”使用这种类比的公认答案是“使用筷子”。它通常只在NTFS文件系统上可用,但在FAT16、FAT32甚至新的exFAT上都不可用。