我使用ReadDirectoryChangesW()函数实现了特定目录文件的任何更改信息。
但是,API向我发送了重复的通知。例如,我只使用FILE_NOTIFY_CHANGE_SIZE标志监视目录“C:\ abc \”而不监视子目录。并且,我尝试编辑并在目录中保存图像文件。 ex)C:\ abc \ imageFile.png
然后,我发送了两个或更多的通知。实际上,我理解为什么会有多个通知。我读了这篇文章。 (http://blogs.msdn.com/b/oldnewthing/archive/2014/05/07/10523172.aspx) 但是,我不知道如何处理多个通知。
我的目标是在更改图像时同步某些win32应用程序上的图像文件。
答案 0 :(得分:0)
FILE_NOTIFY_INFORMATION
的文档告诉我们:
NextEntryOffset 必须跳过才能到达下一条记录的字节数。 值为零表示这是最后一条记录。
所以我们检查那个字段,如果它不是零,我们创建一个新的指针,它是旧指针的许多字节。代码看起来像这样:
FILE_NOTIFY_INFORMATION* p = &s.changeInformation;
while (1) {
std::wcout << L" action " << p->Action << L"\n";
std::wcout << L" file ";
std::wcout.write(p->FileName, p->FileNameLength / sizeof (wchar_t)) << L"\n";
if (!p->NextEntryOffset) break;
p = reinterpret_cast<decltype(p)>(p->NextEntryOffset + reinterpret_cast<uintptr_t>(p));
}
我们必须强制转换,因为值以字节为单位,指针算法自动测量对象中的距离而不是字节。