首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止ReadDirectoryChangesW丢失文件更改

如何防止ReadDirectoryChangesW丢失文件更改
EN

Stack Overflow用户
提问于 2008-09-11 18:16:47
回答 2查看 6.8K关注 0票数 21

互联网上有很多关于ReadDirectoryChangesW API函数在有大量文件活动时丢失文件的帖子。大多数都归咎于ReadDirectoryChangesW函数循环的调用速度。这是一个错误的假设。我所见过的最好的解释是在以下帖子中,2008年4月14日星期一下午2:15:27的评论

http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/

总结一下,ReadDirectoryChangesW函数在文件离开写后队列时报告文件更改,而不是在添加更改时报告。如果在提交之前添加了太多,你会忽略其中的一些。你可以在你的实现中看到这一点,如果你只是写了一个程序在一个目录中快速生成一个1000+文件。只要计算一下你收到了多少个文件事件通知,你就会发现有些时候你不会收到所有的通知。

问题是,有没有人找到一种可靠的方法来使用ReadDirectoryChangesW函数,而不必每次都刷新卷?如果用户不是管理员,则不允许执行此操作,并且可能需要一些时间才能完成。

EN

回答 2

Stack Overflow用户

发布于 2013-10-01 23:13:10

我们从未见过ReadDirectoryChangesW是100%可靠的。但是,最好的处理方法是将“报告”和“处理”分开。

我的实现有一个线程,它只有一个任务,用来对所有事件重新排队。然后第二个线程来处理我的中间队列。基本上,您希望尽可能少地阻碍事件的报告。

在CPU较高的情况下,您还可能会阻碍观察者事件的报告。

票数 1
EN

Stack Overflow用户

发布于 2012-05-24 16:17:22

我也遇到了同样的问题。但是,我没有找到一个保证得到所有事件的解决方案。在几个测试中,我知道应该在GetQueuedCompletionStatus函数返回后尽快再次调用ReadDirectoryChangesW函数。我猜如果文件系统的处理速度比我的应用程序处理速度快很多,那么应用程序可能会丢失一些事件。

无论如何,我将解析逻辑从监控逻辑中分离出来,并将解析逻辑放在线程上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档