所以,問題是:我收到一些我不想得到的通知。但我不知道我得到了什麼文件/目錄。有沒有辦法知道爲什麼通知被解僱?如何調試FindFirstChangeNotification獲取的文件更改通知?
如果您想了解ReadDirectoryChangesW,請包含一個有意義的代碼示例。
所以,問題是:我收到一些我不想得到的通知。但我不知道我得到了什麼文件/目錄。有沒有辦法知道爲什麼通知被解僱?如何調試FindFirstChangeNotification獲取的文件更改通知?
如果您想了解ReadDirectoryChangesW,請包含一個有意義的代碼示例。
如果您希望Windows告訴您特定的文件或子目錄已更改,您將需要使用ReadDirectoryChangesW。如果使用完成例程,則異步模式非常簡單。
另一方面,使用稍微複雜的I/O completion ports方法可能會獲得更好的性能。我會建議下載Wes Jones的優秀CDirectoryChangeWatcher源代碼作爲起點。他的代碼有幾個問題可以幫助您避免,特別是在解析FILE_NOTIFY_INFORMATION
記錄時。
〜僞
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
參見專業Win32 API的新聞組消息://comp.os.ms-windows.programmer.win32 爲衆所周知的MS的樣品(C代碼)(自90年代起...)
使用ReadDirectoryChangesW有什麼困難? – MSN 2009-02-16 06:23:39