c - ReadDirectoryChangesW 不报告上次写入事件

标签 c windows winapi readdirectorychangesw

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

我的问题是:为什么当记事本保存更改的文件时,我从未看到任何“LAST WRITE”更改事件?

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

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

在调试时,我使用 FindFirstFile() 在更改受监视的文件之前和之后获取 WIN32_FIND_DATA 的副本,以验证上次写入时间是否已更改 - 确实如此。那么为什么没有通知呢?为了实现这一点,我需要做一些特殊的事情吗?

最佳答案

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

不。对于“添加”、“删除”、“修改”、“重命名”(oldName)、“重命名”(newName) 操作,完成例程获取 1..5 中的一个值。作为引用,符号的实际名称类似于 FILE_ACTION_REMOVED

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

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

关于c - ReadDirectoryChangesW 不报告上次写入事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397695/

相关文章:

Objective-C 编译器和编辑器

delphi - 有没有办法通过Windows API获取VCL控件的名称?

c++ - 无法使用 GetGUIThreadInfo 获取窗口标题

c++ - 如何调用 DLL API

c - 用于 lzw 压缩的可变长度字符串数组

c++ - 如何通过套接字将数据作为 XML 传递?

c - C 中的结构 - 不打印整个字符串

在 C 中编译和运行没有 main() 的程序

python - from x import y 适用于 Windows 但不适用于 Ubuntu

R,Rstudio 控制台编码窗口