0

我实现了使用 ReadDirectoryChangesW() 函数来找出特定目录的文件的任何更改信息。

但是,API 向我发送了重复的通知。例如,我只使用 FILE_NOTIFY_CHANGE_SIZE 标志监视目录“C:\abc\”而不监视子目录。而且,我尝试在目录中编辑并保存图像文件。例如)C:\abc\imageFile.png

然后,向我发送了两个或更多通知。实际上,我明白为什么会有多个通知。我读了这篇文章。(http://blogs.msdn.com/b/oldnewthing/archive/2014/05/07/10523172.aspx)但是,我不知道如何处理多个通知。

我的目标是在更改图像时同步某些 win32 应用程序上的图像文件。

4

1 回答 1

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));
}

我们必须进行强制转换,因为值是以字节为单位的,并且指针算法会自动测量对象的距离而不是字节。

于 2017-07-22T23:42:37.727 回答