0

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

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

我最初只等待 FILE_NOTIFY_CHANGE_CREATION、_LAST_WRITE 和 _FILE_NAME 事件,并想知道为什么我从未看到最后写入事件(但我确实看到了 _DIR_NAME 事件,但我并没有等待),所以我改为等待所有事件。

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

在调试时,我曾经FindFirstFile()在更改被监视的文件之前和之后获取 WIN32_FIND_DATA 的副本,以验证上次写入时间是否已更改——确实如此。那为什么不通知呢?为了启用它,我需要做些什么特别的事情吗?

4

1 回答 1

0

事实证明我没有阅读足够的文档。我错误地假设完成例程的操作将使用与 FILE_NOTIFY_CHANGE_*** 符号相同的位掩码值。毕竟,只有取回我输入的内容才有意义,对吧?

没有。完成例程从 1..5 获取已添加、已删除、已修改、重命名(旧名称)、重命名(新名称)的操作的值。作为参考,符号的实际名称类似于FILE_ACTION_REMOVED.

这是令人失望的,因为一个可以监控的 8 个东西中的 5 个将全部变为FILE_ACTION_MODIFIED,而一个可以监控的其余 3 个东西映射到剩余的 4 个 FILE_ACTION 符号。

如果其他人有类似的问题,我将留下我的愚蠢问题。

于 2019-10-15T15:24:24.580 回答