监控目录或目录树中的更改

【勇芳软件工作室】汉化HomePreviousNext

以下示例监视从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());

}

}