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();
}
变通知对象,设置初始的改变通知过滤条件。在指定的目录或子目录下,当一个符合过滤条件
的改变发生时,一个在通知句柄上的等待将会成功(等待函数返回)。
函数原型如下:
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();
}
相关文章推荐
- VC++ 文件监控(二) FindFirstChangeNotification
- FindFirstChangeNotification,创建一个文件通知对象,该对象用于监视文件系统发生的变化
- Obtaining Directory Change Notifications(微软的例子,使用FindFirstChangeNotification,FindNextChangeNotification,FindCloseChangeNotification API函数)
- FindFirstChangeNotification
- (转)FindFirstChangeNotification,创建一个文件通知对象,该对象用于监视文件系统发生的变化
- 监控目录中文件的变化---FindFirstChangeNotification
- FindFirstChangeNotification FindNextChangeNotification实现应用层文件监控的代码分析
- spooler API研究——FindFirstPrinterChangeNotification和FindNextPrinterChangeNotification
- EF6 Database First (DbContext) - Change Schema at runtime
- error C2664: “FindFirstFileW”: 不能将参数 1 从“char [261]”转换为“LPCWSTR” 解决
- Windows API一日一练(58)FindFirstFile和FindNextFile函数
- Windows API一日一练(58)FindFirstFile和FindNextFile函数
- CeFindFirstRegChange
- FindFirst,FindNext,FindClose学习
- string类中find() 函数 和find_first_of()函数的区别
- EF6 Database First (DbContext) - Change Schema at runtime
- C++语法基础--泛型算法(generic algorithm)--只读算法accumulate(),find_first_of(),count(),count_if()
- MySQL主从error1236:‘Could not find first log file name in binary log index file’处理#Olivia丶长歌#
- FindFirstFile和FindNextFile函数
- 查找算法---find运算,find_first_of的使用