2009-02-02 2 views
1

Итак, вопрос в том, что я получаю уведомления, которые я не хочу получать. Но я не знаю, для какого файла/dir я их получил. Есть ли способ узнать, почему данное уведомление было уволено?Как отлаживать уведомления об изменении файла, полученные методом FindFirstChangeNotification?

Если вы думаете о ReadDirectoryChangesW, пожалуйста, укажите содержательный образец кода.

+0

Что такого сложного в использовании ReadDirectoryChangesW? – MSN

ответ

2

Если вы хотите, чтобы Windows сообщила вам, какой конкретный файл или подкаталог изменился, вам нужно будет использовать ReadDirectoryChangesW. Асинхронный режим довольно прост, если вы используете процедуру завершения.

С другой стороны, вы, вероятно, получите лучшую производительность, используя несколько более сложный подход I/O completion ports. Я бы порекомендовал загрузить исходный код CDirectoryChangeWatcher от Wes Jones в качестве отправной точки. Есть несколько ошибок, которые его код поможет вам избежать, особенно при анализе записей FILE_NOTIFY_INFORMATION.

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

0

Посмотреть на профессиональные новости Win32 API телеконференции: //comp.os.ms-windows.programmer.win32 для хорошо известных образцов MS (C код) (с 90-х годов ...)