以下示例监视从C:\\开始的目录树,以进行目录名更改。它还监视C:\\ WINDOWS目录的文件名更改。
该示例使用FindFirstChangeNotification函数创建两个通知句柄和WaitForMultipleObjects函数来等待句柄。每当在C:\\开始的树中创建或删除目录时,该示例将更新整个目录树。每当在C:\\ WINDOWS目录中创建或删除文件时,该示例将刷新WINDOWS目录。每当该示例处理更改时,FindNextChangeNotification功能将重新启动更改通知。
DWORD dwWaitStatus;
HANDLE dwChangeHandles[2];
//观看C:\\ WINDOWS目录以创建文件
//删除。
dwChangeHandles[0] = FindFirstChangeNotification(
"C:\\WINDOWS", //目录来观看
FALSE, //不要看子树
FILE_NOTIFY_CHANGE_FILE_NAME); //观看文件名更改
if (dwChangeHandles[0] == INVALID_HANDLE_VALUE)
ExitProcess(GetLastError());
//观看目录创建的C:\\子树
//删除。
dwChangeHandles[1] = FindFirstChangeNotification(
"C:\\", //目录来观看
TRUE, //看子树
FILE_NOTIFY_CHANGE_DIR_NAME); //观看目录名称更改
if (dwChangeHandles[1] == INVALID_HANDLE_VALUE)
ExitProcess(GetLastError());
//设置更改通知。现在等待两个通知
//相应地处理和刷新。
while(TRUE)
{
//等待通知。
dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles,
FALSE, INFINITE);
switch(dwWaitStatus){
case WAIT_OBJECT_0:
//在C:\\ WINDOWS中创建或删除文件。
//刷新此目录并重新启动
//更改通知。enRefreshDirectory是一个
//应用程序定义的函数。
RefreshDirectory("C:\\WINDOWS")
if(FindNextChangeNotification(
dwChangeHandles[0]) == FALSE )
ExitProcess(GetLastError());
break;
case WAIT_OBJECT_0 + 1:
//在C:\\中创建或删除目录。
//刷新目录树并重新启动
//更改通知。enRefreshTree是一个
//应用程序定义的函数。
RefreshTree("C:\\");
if(FindNextChangeNotification(
dwChangeHandles[1]) == FALSE)
ExitProcess(GetLastError());
break;
默认:
ExitProcess(GetLastError());
}
}