gpt4 book ai didi

.net - 如何防止 ReadDirectoryChangesW 丢失文件更改

转载 作者:可可西里 更新时间:2023-11-01 12:17:52 25 4
gpt4 key购买 nike

Internet 上有很多关于 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 函数而不必每次都刷新卷?如果用户不是管理员,则不允许这样做,并且还可能需要一些时间才能完成。

最佳答案

如果 API 不可靠,那么变通方法可能是您唯一的选择。这当然可能涉及跟踪 lastmodified 和文件名。 这并不意味着您需要在查找更改时进行轮询,相反,您可以使用 FileSystemWatcher 作为触发检查的手段。

因此,如果您跟踪 ReadDirectoryChangesW/FSW 事件发生的最后 50-100 次,并且您看到它被快速调用,您可以检测到这一点并触发特殊条件以获取几秒钟内所有已更改的文件(并设置一个标志以暂时防止 future 的虚假 FSW 事件)。

由于有些人对此解决方案的评论感到困惑,我建议您监控事件从 ReadDirectoryChangesW 到达的速度有多快,以及何时到达太快,尝试尝试一种解决方法(通常是手动扫描目录)。

关于.net - 如何防止 ReadDirectoryChangesW 丢失文件更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com