这篇文章 应该有所帮助。基本上,您创建一个或多个通知对象,例如:
处理 dwChangeHandles[2];
dwChangeHandles[0] = FindFirstChangeNotification(
lpDir, // 观察目录
FALSE, // 不看子树
FILE_NOTIFY_CHANGE_FILE_NAME); // 观察文件名变化
如果(dwChangeHandles[0] == INVALID_HANDLE_VALUE)
{
printf("\n 错误:FindFirstChangeNotification 函数失败。\n");
ExitProcess(GetLastError());
}
// 观察子树目录的创建和删除。
dwChangeHandles[1] = FindFirstChangeNotification(
lpDrive, // 观看的目录
TRUE, // 观察子树
FILE_NOTIFY_CHANGE_DIR_NAME); // 观察目录名称变化
if (dwChangeHandles[1] == INVALID_HANDLE_VALUE)
{
printf("\n 错误:FindFirstChangeNotification 函数失败。\n");
ExitProcess(GetLastError());
}
然后等待通知:
而(真)
{
// 等待通知。
printf("\n等待通知...\n");
DWORD dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles,
错误,无限);
开关(dwWaitStatus)
{
案例 WAIT_OBJECT_0:
// 在目录中创建、重命名或删除文件。
// 重启通知。
if ( FindNextChangeNotification(dwChangeHandles[0]) == FALSE )
{
printf("\n 错误:FindNextChangeNotification 函数失败。\n");
ExitProcess(GetLastError());
}
休息;
案例 WAIT_OBJECT_0 + 1:
// 重启通知。
if (FindNextChangeNotification(dwChangeHandles[1]) == FALSE)
{
printf("\n 错误:FindNextChangeNotification 函数失败。\n");
ExitProcess(GetLastError());
}
休息;
案例WAIT_TIMEOUT:
// 发生超时。如果其他一些价值会发生这种情况
// 而不是在等待调用中使用 INFINITE 并且不会发生任何更改。
// 在单线程环境中,您可能不需要
// 无限等待。
printf("\n超时时间没有变化。\n");
休息;
默认:
printf("\n 错误:未处理的 dwWaitStatus.\n");
ExitProcess(GetLastError());
休息;
}
}
}