您的位置:首页 > 其它

FindFirstChangeNotification

2014-09-11 14:31 411 查看
要监视指定目录中的变化可以使用FindFirstChangeNotification 函数。此函数创建一个改

变通知对象,设置初始的改变通知过滤条件。在指定的目录或子目录下,当一个符合过滤条件
的改变发生时,一个在通知句柄上的等待将会成功(等待函数返回)。

函数原型如下:

HANDLE FindFirstChangeNotification(

LPCTSTR lpPathName, // 指定要监视的目录

BOOL bWatchSubtree, // 指定是否监视lpPathName 目录下的所有子目录

DWORD dwNotifyFilter // 指定过滤条件
);

dwNotifyFilter 参数指定了能够满足改变通知等待(即能够使等待函数返回)的过滤条件,

可以是以下值的组合:

FILE_NOTIFY_CHANGE_FILE_NAME 要求监视文件名称的改变

FILE_NOTIFY_CHANGE_DIR_NAME 要求监视目录名称的改变

FILE_NOTIFY_CHANGE_ATTRIBUTES 要求监视属性的改变

FILE_NOTIFY_CHANGE_SIZE 要求监视文件大小的改变

FILE_NOTIFY_CHANGE_LAST_WRITE 要求监视最后写入时间的改变

FILE_NOTIFY_CHANGE_SECURITY 要求监视安全属性的改变

函数执行成功返回值是改变通知对象句柄,INVALID_HANDLE_VALUE 是失败后的返回

值。返回的句柄可传递给等待函数(如WaitForSingleObject 等)。当监视的目录或子目录中一

个过滤条件满足的时候,等待就会返回。

等待函数返回之后,应用程序可以处理这个改变,并调用FindNextChangeNotification 函

数继续监视目录。当不再使用这个句柄时,应当调用FindCloseChangeNotification 函数关闭它。
这两个函数的惟一参数是FindFirstChangeNotification 函数返回的句柄。

以下是一个利用上述API函数实现基本的监控程序的例子:(VC6.0编译运行通过)

#include<windows.h>

#include<stdio.h>

#include<conio.h>

void main()

{

//监视C盘根目录下文件名改变的例子,其中while循环一直监控,知道程序关闭

HANDLE hChangeHandle=FindFirstChangeNotification("C:\\",false,FILE_NOTIFY_CHANGE_FILE_NAME);

//判断是否设置成功

if(hChangeHandle==INVALID_HANDLE_VALUE)

{

printf("Find First Change Notification failed\n");

return ;

}

//等待通知 

if(WaitForSingleObject(hChangeHandle,-1)==0)

{

printf("These change a file name\n");

}

//循环等待

while(true)

{

if(FindNextChangeNotification(hChangeHandle))

{

if(WaitForSingleObject(hChangeHandle,-1)==0)

{

printf("These change a file name\n");

}

}

}

//结束监视程序调用FindCloseChangeNotification关闭句柄

FindCloseChangeNotification(hChangeHandle);

//按键退出程序

getch();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐