问题标签 [readdirectorychangesw]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 如何防止 ReadDirectoryChangesW 丢失文件更改
互联网上有很多关于 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 函数而不必每次都刷新音量?如果用户不是管理员,则不允许这样做,并且还可能需要一些时间才能完成。
c++ - 我可以使用 FindFirstChangeNotification 和 FindNextChangeNofication 而不是 ReadDirectoryChangesW 获取指定目录中的文件信息更改吗?
当指定目录的文件或子目录发生任何更改时,我希望收到通知。我用以下简单的代码段实现了这个功能:
如何在不使用的情况下获取操作类型或文件名等信息ReadDirectoryChangesW
?
windows - 如何使用带有完成例程的 ReadDirectoryChangesW() 方法?
我想ReadDirectoryChangesW()
在提供 I/O 完成例程的异步模式下使用函数。
问题是我不知道如何检索有关完成例程(CALLBACK
函数)中更改的确切信息。完成例程定义如下:
我想知道信息是否包含在LPOVERLAPPED
结构中。但我不知道如何得到它。
c++ - 异步使用 ReadDirectoryChangesW 时的线程死锁
我想在一个线程中实时监控多个目录的变化,所以我决定将 ReadDirectoryChangesW() 方法与 GetQueuedCompletionStatus 异步使用。这是我的代码:
在这里,当我运行我的代码时,我的线程会无缘无故地阻塞,无论我为 GetQueuedCompletionStatus() 函数的最后一个参数设置什么值。我不知道为什么我遇到了这个问题。谁能告诉我原因?非常感谢!
c++ - 为什么我的 ReadDirectoryChangesW 没有拾取更改的文件?
我确定我只是在做一些非常愚蠢的事情而没有看到它,但是谁能告诉我为什么下面的代码不会在传入的目录中获取更改?
调用此代码时,忽略在传入的 m_directory 中创建和修改文件或目录。但如果我打电话
然后 GetQueuedCompletionStatus 正确退出。有谁看到我做错了什么?这是代码:
编辑:
好的,我认为 ReadDirectoryChangesW() 肯定会返回 TRUE,但事实并非如此。GetLastError() 告诉我错误是 ERROR_INVALID_HANDLE (6)。奇怪的是,logDirHandle 似乎是有效的,并且在调用 CreateFile() 时没有发生错误。
此外,我稍微重构以调用同步 ReadDirectoryChangesW 保持一切相同,除了丢失 OVERLAPPED 的东西,它工作正常。所以我猜我错误地实现了 OVERLAPPED 的东西?
winapi - 如何知道文件已完成复制
我正在使用 ReadDirectoryChangesW 来监视一个文件夹,如果我将一个大文件复制到该文件夹,我可以收到多个 FILE_ACTION_MODIFIED 消息,似乎每次 Windows 写入一大块文件时,你都会收到每个文件的修改通知时间。我尝试使用 CreateFile API 来检查文件是否可以被 AP 打开,但有时,某些文件总是被其他 AP 锁定,例如,如果您正在打开 Outlook,PST 会更新,但我的 AP 可以'不要访问它,我们必须启动 Shadow Copy 才能打开它。所以我的问题是,如何知道文件已完成复制?
windows - 为什么 ReadDirectoryChangesW 忽略事件?
我使用 ReadDirectoryChangesW 来监视指定的目录并在检测到更改时更新索引结构。我使用以下代码(大致)
过滤器是
并且目录句柄是这样获得的:
当我删除多个文件时,我只收到一个事件,NextOffset 为 0!当我删除一个目录时,我只得到该目录的一个事件。如果我希望目录中的每个文件都有一个事件怎么办?
任何帮助,将不胜感激。
windows - 为什么异步使用 ReadDirectoryChangesW?
我已经阅读了该项目的文档ReadDirectoryChangesW()
并查看了该CDirectoryChangeWatcher
项目,但都没有说明为什么要异步调用它。我知道当前线程不会阻塞,但是,至少对于使用完成端口的 CDirectoryChangeWatcher 代码,当它调用时 GetQueuedCompletionStatus()
,该线程无论如何都会阻塞(如果没有更改)。
因此,如果我ReadDirectoryChangesW()
首先在一个单独的线程中同步调用,而我不在乎它是否阻塞,我为什么要ReadDirectoryChangesW()
异步调用呢?
c++ - ReadDirectoryChangesW 认为快捷方式在创建后立即被删除
我正在使用ReadDirectoryChangesW 的这个实现来监视对桌面的更改。我的程序计划在桌面上创建文件时运行一些小程序。
现在我遇到的问题是,当我通过右键单击上下文菜单创建新的快捷方式时,ReadDirectoryChangesW 收到一条通知说文件已创建,但在它收到另一个通知说文件已被删除之后。自 Windows Vista 以来,我一直遇到这个问题。
有人知道可能出了什么问题吗?我应该使用其他功能来监视特定于 Vista 和 7 的目录更改吗?
谢谢,克里希纳
java - 设置为 ReadDirectoryChangesW 打开的目录的最后修改时间
我有一个 Java 程序,它需要监视目录树的变化。我有使用ReadDirectoryChangesW()
. 目录打开方式如下:
然后我dirHandle
传给ReadDirectoryChangesW()
. 所有这些都很好。
问题是代码的其他部分(在 Java 端)用于File.setLastModified()
“触摸”文件或目录(将它们的时间戳更新为“现在”)。这通常有效;但是,当它尝试“触摸”使用CreateFile()
.
为了查看实际发生的 Windows 错误,我查看了 JDK 源代码,File.setLastModified()
并在我自己的代码中重新实现了它,并添加了从GetLastError()
;打印错误。错误是:
怎么回事?这是相同的过程。我什至通过FILE_SHARE_READ
和FILE_SHARE_WRITE
到CreateFile()
。
有没有办法使这项工作?
更多信息
File.setLastModified()
JDK 中的本机代码实现执行以下操作:
如果我将第一个更改0
为FILE_SHARE_READ | FILE_SHARE_WRITE
,则一切正常。所以看起来JDK实现有点坏了。:(
所以我现在的问题变成了:有没有办法让这项工作而不必使用我自己的(重新)实现File.setLastModified()
?