FindFirstChangeNotification( );
FindNextChangeNotification( );
WaitForSingleObject( );
其中FindFirstChangeNotification(lpzpath,fwatchsubtree,fdwfilter)中的lpzpath表示要监视的路径名,fwatchsubtree判断是否查看子目录,fdwfilter为要监视的事件,函数执行成功后返回一个句柄。
参数fdwfilter取值及其含义如下:
FILE_NOTIFY_CHANGE_FILE_NAME 查看指定目录下任何文件名的改变
FILE_NOTIFY_CHANGE_DIR_NAME 查看指定目录下任何目录名的改变
FILE_NOTIFY_CHANGE_SIZE 查看指定目录下文件大小的改变
FILE_NOTIFY_CHANGE_ATTRIBUTES 查看指定目录下文件属性的改变
FindNextChangeNotification(hchange),hchange为FindFirstChangenNotification返回的句柄,其作用是请求系统
在下次检测到相应改变时发出改变通知消息句柄。当函数成功返回后,应用程序可通过WaitForMultipleObjects或WaitfForSingleObject来等待发生改变的通知。WaitForSingleObject(hchange,dwmilliseconds)中hchange为FindFirstChangeNotification 返回的句柄,dwmilliseconds为等待时间值,指定等待完成需要的时间,单位为毫秒。该值为-1时表示时间无限长。最好在结束监视程序之前先用FindCloseChangeNotification(hchange)来关闭句柄。
下面给出一个简单的实例,其功能就是监视c:/pwin98目录下是否有文件发生变化。一旦有重命名、创建或删除情况发生时,通过Edit控件给出提示。
//
----------------
#include
#pragma hdrstop
#include “Unit1.h”
//----------------
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm1 *Form1;
//-----------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DWORD dwWaitStatus;
HANDLE dwChangeHandle; //返回通知的句柄
dwChangeHandle=FindFirstChangeNotification(
“C://PWIN98”,false,FILE_NOTIFY_CHANGE_FILE_NAME); //设置返回通知的句柄
if(dwChangeHandle==INVALID_HANDLE_VALUE)
//判断是否设置成功
ExitProcess(GetLastError( ));
while(true){ //设置循环,监视是否有
dwWaitStatus=WaitForSingleObject(dwChangeHandle,-1); //通知返回
switch(dwWaitStatus){
case 0:
Edit1->Text=“Something Changed”; //给出提示
FindCloseChangeNotification(dwcChangeHandle); //关闭句柄
exit(EXIT_SUCCESS); //退出程序
default:
ExitProcess(GetLastError( ));
}
}
}
监视文件变化
最新推荐文章于 2022-07-11 14:16:29 发布