Для отслеживания или для работы с файловой системой в операционной системе Windows используется система извещений. Для начала отслеживания изменений в каталогах необходимо создать дескриптор контроля изменений и установить начальные условия фильтрации извещений об изменениях: FindFirstChangeNotification.
В этой функции можно задать каталог для отслеживания, необходимость анализа подкаталогов и виды изменений, которые должны отслеживаться. Возвращаемое значение – дескриптор обнаруженного объекта контроля изменений, который используется при контроле изменений с помощью функций WaitForSingleObject или WaitForMultipleObject.
В случае необходимости повторного ожидания извещения используется функция FindNextChangeNotification.
Для прекращения отслеживания изменений для заданного дескриптора используется функция FindCloseChangeNotification.
Пример. Вывод содержимого каталога в случае изменения имен файлов в нем.
#include <windows.h>
#include <stdio.h>
HANDLE hFind;
HANDLE g_hndl;
WIN32_FIND_DATA fd;
BOOL bRet = TRUE;
int main()
{
//инициализируем дескриптор уведомлений
g_hndl = FindFirstChangeNotification("D:\\TEMP",
FALSE, FILE_NOTIFY_CHANGE_FILE_NAME);
if(g_hndl == INVALID_HANDLE_VALUE)
{
printf("Invalid Handle\n");
}
//ожидание появления уведомлений
if(WaitForSingleObject(g_hndl, INFINITE) != WAIT_FAILED)
{
printf("File Name Changed!");
//Вывод списка файлов в директории
hFind = FindFirstFile("D:\\TEMP\\*.*", &fd );
while ( hFind != INVALID_HANDLE_VALUE && bRet)
{
if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
printf("%s\n",fd.cFileName);
}
bRet = FindNextFile( hFind, &fd );
}
FindClose( hFind );
//Эта часть не нужна в данной программе - приведена для примера
/**/ if(FindNextChangeNotification(g_hndl) == FALSE)
/**/ {
/**/ printf("Find Next failed\n");
/**/ }
}
FindCloseChangeNotification(g_hndl);
return 0;
}
Источник: Панченко В.І та ін. Системне програмне забезпечення Windows [текст] навч. посібник П16 [з дисципліни "Системне програмне забезпечення"] / В.І. Панченко, А. М. Клименко, И. В. Максита, - Харків: НТУ "ХПІ", 2009 - 196 с.