我正在与 GetQueuedCompletionStatus 结合使用 ReadDirectoryChangesW (Windows API)。如何检测可能的缓冲区溢出,以了解至少有一个文件系统更改事件已丢失?
答案 0 :(得分:2)
异步使用ReadDirectoryChangesW
时,您将获得第一组事件,然后您必须再次调用它以获取更多事件。拥有的事件多于 缓冲区中的事件不是错误。在事件级缓冲区中有更多的事件是错误条件,你会发现如下:
ReadDirectoryChangesW
启动的异步操作成功完成。填充缓冲区,设置事件句柄或触发IOCP。ReadDirectoryChangesW
以开始异步重叠操作,检查自第2步以来发生的任何事件。此调用同步失败,GetLastError() == ERROR_NOTIFY_ENUM_DIR
自the documentation says this also means to re-enumerate the directory dwBytesTransferred == 0
成功
醇>
如果传输的字节数为零,则缓冲区要么太大而不能分配系统,要么太小,无法提供有关目录或子树中发生的所有更改的详细信息。在这种情况下,您应该通过枚举目录或子树来计算更改。
答案 1 :(得分:1)
您可能无法以这种方式完成检测,但here是一个很有用的教程,可能有所帮助。
您还可以查看this other question.
的答案答案 2 :(得分:0)
从here判断,似乎没有返回异步的错误代码。
建议:同步监控更改,但在专用线程中,请注意ERROR_NOTIFY_ENUM_DIR
。