所以,问题是:我收到了一些我不想要的通知。但我不知道我得到了什么文件/目录。有没有办法知道给定通知被解雇的原因?
如果您考虑ReadDirectoryChangesW,请提供有意义的代码示例。
答案 0 :(得分:2)
如果您希望Windows告诉您更改了哪个特定文件或子目录,则需要使用ReadDirectoryChangesW。如果使用完成例程,异步模式非常简单。
另一方面,使用稍微复杂的I/O completion ports方法可能会获得更好的性能。我建议下载Wes Jones优秀的CDirectoryChangeWatcher源代码作为起点。他的代码可以帮助您避免一些问题,特别是在解析FILE_NOTIFY_INFORMATION
记录时。
答案 1 :(得分:0)
〜伪代码
HANDLE handles[MAX_HANDLES];
std::string dir_array[MAX_HANDLES];
for i from 0 to MAX_HANDLES:
h[i] = FindFirstChangeNotification(dir_array[i]...);
nCount = MAX_HANDLES;
ret = WaitForMultipleObjects(handles, nCount ...);
// check if ret returns something between WAIT_OBJECT_0 and WAIT_OBJECT_0+nCount-1
if "so":
ret -= WAIT_OBJECT_0;
cout << "Directory " << dir_array[ret] << " changed" << endl;
请参阅:http://msdn.microsoft.com/en-us/library/ms687025(VS.85).aspx
答案 2 :(得分:0)
参见专业的Win32 api新闻组新闻://comp.os.ms-windows.programmer.win32 对于众所周知的MS样本(C代码)(自90年代起......)