一个文件修改监视的小工具
来源:互联网 发布:淘宝雪花秀小样真假 编辑:程序博客网 时间:2024/04/28 16:34
第一次在这个BLOG写发表.
主要用到一个API:ReadDirectoryChangesW 并开多个线程来监视多个文件夹的内容改变的情况,API的实现如下(代码中的其中一):下载该文件
UINT ListCtrlX::StateoutIng( LPVOID lParam) //系统监视的实现
...{
MYDATA* p= (MYDATA *)lParam;
ListCtrlX* pFsw = (ListCtrlX*)p->Param;
HANDLE hdir = CreateFile(
p->lpDir,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL
);
if( INVALID_HANDLE_VALUE == hdir ) return false;
char buf[ 2*(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH) ];
FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION *)buf;
DWORD BytesReturned;
while(ReadDirectoryChangesW(hdir,
pNotify,
sizeof(buf),
true,
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_LAST_ACCESS|
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_SECURITY,
&BytesReturned,
NULL,
NULL ))
...{
char tmp[1024], str1[1024], str2[1024];
CString temp;
memset( tmp, 0, sizeof(tmp) );
WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );
strcpy( str1, tmp );
if( 0 != pNotify->NextEntryOffset )
...{
PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset);
memset( tmp, 0, sizeof(tmp) );
WideCharToMultiByte( CP_ACP,0,p->FileName,p->FileNameLength/2,tmp,99,NULL,NULL );
strcpy( str2,tmp );
}
CString paths=p->lpDir;
paths+=str1;
if (pNotify->Action!=4)
...{
strcpy( str2, "");
}
pFsw->GetAllText(pNotify->Action,paths,pFsw->GetTimeString(),str2);
//写入记录文件
}
return 0;
}
...{
MYDATA* p= (MYDATA *)lParam;
ListCtrlX* pFsw = (ListCtrlX*)p->Param;
HANDLE hdir = CreateFile(
p->lpDir,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL
);
if( INVALID_HANDLE_VALUE == hdir ) return false;
char buf[ 2*(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH) ];
FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION *)buf;
DWORD BytesReturned;
while(ReadDirectoryChangesW(hdir,
pNotify,
sizeof(buf),
true,
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_LAST_ACCESS|
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_SECURITY,
&BytesReturned,
NULL,
NULL ))
...{
char tmp[1024], str1[1024], str2[1024];
CString temp;
memset( tmp, 0, sizeof(tmp) );
WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );
strcpy( str1, tmp );
if( 0 != pNotify->NextEntryOffset )
...{
PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset);
memset( tmp, 0, sizeof(tmp) );
WideCharToMultiByte( CP_ACP,0,p->FileName,p->FileNameLength/2,tmp,99,NULL,NULL );
strcpy( str2,tmp );
}
CString paths=p->lpDir;
paths+=str1;
if (pNotify->Action!=4)
...{
strcpy( str2, "");
}
pFsw->GetAllText(pNotify->Action,paths,pFsw->GetTimeString(),str2);
//写入记录文件
}
return 0;
}
- 一个文件修改监视的小工具
- 筛选文件修改日期和类型的一个文件小工具
- 一个倒计时的小工具
- 一个Python的小工具
- 一个 popupwindow的小工具
- 一个管理硬盘/光盘文件的小工具: CD Manager
- 一个显示文件路径的小工具【代码】
- 一个用于清除CVS文件的小工具
- 【菜】一个检查文件MD5的小工具
- Linux下的一个文件查询小工具
- 监视linux性能的18个命令或小工具
- 一天一个小工具---文件拷贝
- oracle修改字符集的小工具csscan
- oracle修改字符集的小工具csscan
- 自动检测代码的一个小工具...
- 一个远程系统控制台的小工具
- 一个值得收藏的小工具
- MD5加密的一个小工具
- fma
- sql server 查看库内表的大小。
- Acro Multi-Language Class-Method for TeeChart
- 图文CVS入门(二)——项目开发实践
- Acro Multi-Language Class-Method for FastReport
- 一个文件修改监视的小工具
- burst
- 好久没有来
- 恋着多喜欢
- “分享智能手机使用心得”新春茶话会·1月29日·北京·希格马中心
- Struts下JSP页面传递复选框值技巧
- keni:CLR无用内存回收学习笔记(1)
- eXtremeConponent's Form指南
- 版本控制软件(CVS,SVN)常见的术语