如何调试FindFirstChangeNotification获取的文件更改通知?

时间:2009-02-02 14:36:20

标签: c++ debugging winapi notifications

所以,问题是:我收到了一些我不想要的通知。但我不知道我得到了什么文件/目录。有没有办法知道给定通知被解雇的原因?

如果您考虑ReadDirectoryChangesW,请提供有意义的代码示例。

3 个答案:

答案 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年代起......)