ReadDirectoryChangesW 不报告上次写入事件

ReadDirectoryChangesW not reporting last write events

我已经设法 ReadDirectoryChangesW() 处理我需要监控的文件夹。我正在使用 IO Completion 例程,所有更改监视都是由一个线程完成的,该线程除了等待更改和停止信号外什么都不做。一切正常。完成例程目前只是将通知记录中更改的文件名和操作记录到系统调试日志中。同样,似乎工作正常。测试时,我正在等待所有可用事件(掩码 0x017F)。

我的问题是:为什么在记事本保存更改的文件时,我从来没有看到任何 LAST WRITE 更改事件?

我最初只等待 FILE_NOTIFY_CHANGE_CREATION、_LAST_WRITE 和 _FILE_NAME 事件,想知道为什么我从来没有看到 last write 事件(但我确实看到了 _DIR_NAME 事件,这我没有等待),所以我改为等待一切。

我的代码目前与我在此处找到的示例非常相似:ReadDirectoryChangesW

在调试时,我使用 FindFirstFile() 在更改被监视的文件之前和之后获取了 WIN32_FIND_DATA 的副本,以验证上次写入时间是否已更改 -- 它确实发生了更改。那么为什么没有通知呢?我需要做些什么才能启用它吗?

原来是我文档看的不够多。我错误地假设给完成例程的操作将使用与 FILE_NOTIFY_CHANGE_*** 符号相同的位掩码值。毕竟,只有拿回我投入的东西才有意义,对吧?

没有。对于 Added、Removed、Modified、Renamed(oldName)、Renamed(newName) 操作,完成例程从 1..5 获取值。作为参考,符号的实际名称如 FILE_ACTION_REMOVED.

这令人失望,因为可以监视的 8 个事物中有 5 个将全部变成 FILE_ACTION_MODIFIED,而剩下的 3 个可以监视的事物映射到剩余的 4 个 FILE_ACTION 符号。

我要留下我的愚蠢问题以防其他人有类似的问题。