Как отладить уведомления об изменениях файлов, полученные FindFirstChangeNotification? - PullRequest
1 голос
/ 02 февраля 2009

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

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

Ответы [ 3 ]

2 голосов
/ 19 мая 2009

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

С другой стороны, вы, вероятно, получите более высокую производительность, если использовать более сложный подход порты завершения ввода / вывода . Я бы рекомендовал загрузить отличный исходный код Уэса Джонса CDirectoryChangeWatcher в качестве отправной точки. Есть несколько ошибок, которые его код поможет вам избежать, особенно при разборе FILE_NOTIFY_INFORMATION записей.

0 голосов
/ 04 февраля 2009

См. На новостях профессиональной группы Win32 api: для известных образцов MS (код C) (с 90-х годов ...)

0 голосов
/ 03 февраля 2009

~ псевдокод

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

...