Отслеживаю в директории fPath изменения с помощью механизма FindFirstChangeNotification/FindNextChangeNotification
Вот такой код.
void ProcessNotification()
{
cout << "file was changed\n";
}
int LookForChangesLoop()
{
HANDLE hNotify = FindFirstChangeNotification(fPath, false,
FILE_NOTIFY_CHANGE_LAST_WRITE);
if(hNotify == INVALID_HANDLE_VALUE)
{
log.winError("Can not create notification object");
return -1;
}
for(;;)
{
int waitStatus = WaitForSingleObject(hNotify, INFINITE);
if(waitStatus == WAIT_OBJECT_0)
ProcessNotification();
if(!FindNextChangeNotification(hNotify))
{
log.winError("FindNextChangeNotification failed");
return -1;
}
}
}
При тестировании обнаружил, что уведомление об изменении приходит как бы два раза подряд, то есть стоит изменить файл внутри директории и в консоль выводится
file was changed
file was changed
Если изменить фильтр на FILE_NOTIFY_CHANGE_SIZE то приходит один раз, но флаг FILE_NOTIFY_CHANGE_LAST_WRITE идеологически более верный.
Что же здесь не так?