监控特定文件夹的事件:三种解决方法汇总
来源:互联网 发布:grub默认启动windows 编辑:程序博客网 时间:2024/05/17 04:27
LDBIVR程序中要监视特定文件夹的文件落地或者删除事件,本来要用SHELL中的事件通知机制,后来因为要考虑到各种意外事件,如服务意外退出、服务器崩溃等,遂作罢。
对于目录事件异步通知,大致有三个方法:
调用Windows的api函数ReadDirectoryChanges监视指定目录中文件(推荐使用),这个使用异步IO:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/readdirectorychangesw.asp
The ReadDirectoryChangesW function retrieves information that describes the changes within a directory.
To track changes on a volume, see change journals.
BOOL ReadDirectoryChangesW(
HANDLE hDirectory,
LPVOID lpBuffer,
DWORD nBufferLength,
BOOL bWatchSubtree,
DWORD dwNotifyFilter,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped,
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
或者用SHChangeNotifyRegister和SHChangeNotifyDeregister来注册事件SHChangeNotify:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shchangenotify.asp
SHChangeNotify Function
Notifies the system of an event that an application has performed. An application should use this function if it performs an action that may affect the Shell.
Syntax
void SHChangeNotify(
LONG wEventId,
UINT uFlags,
LPCVOID dwItem1,
LPCVOID dwItem2
);
这个SHELL事件,有人这么介绍(http://qk.5nx.com/article_view.asp?id=11)。
或者调用API函数-FindFirstChangeNotification 、FindCloseChangeNotification、FindNextChangeNotification 和WaitForSingleObject :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findfirstchangenotification.asp
FindFirstChangeNotification
The FindFirstChangeNotification function creates a change notification handle and sets up initial change notification filter conditions. A wait on a notification handle succeeds when a change matching the filter conditions occurs in the specified directory or subtree. However, the function does not indicate the change that satisfied the wait condition.
To retrieve information about the specific change as part of the notification, use the ReadDirectoryChangesW function.
HANDLE FindFirstChangeNotification(
LPCTSTR lpPathName,
BOOL bWatchSubtree,
DWORD dwNotifyFilter
);
著名的FileMon工具用的是虚拟驱动。
相关资源:
1:《监视程序的编制》;
2:《Win32中的目录监控》;
3:《change journals》;
4:《CDirectoryChangeWatcher - ReadDirectoryChangesW all wrapped up》;
5:《监测目录活动》;
6:《请问如何监视系统对文件的访问?》。
- [C++]监控特定文件夹的事件:三种解决方法汇总
- [C++]监控特定文件夹的事件:三种解决方法汇总
- [C++]监控特定文件夹的事件:三种解决方法汇总
- [C++]监控特定文件夹的事件:三种解决方法汇总
- 监控特定文件夹的事件:三种解决方法汇总
- 监控特定文件夹的事件:三种解决方法汇总
- 监控特定文件夹改变
- 指定特定对象的特定事件
- Node监控文件夹中的文件改变事件
- 取消特定的click事件
- 如何打开特定的文件夹目录
- 遍历文件夹下特定的文件
- C#读取文件夹特定文件的方法
- 监控系统故障的解决方法
- QT的事件监控
- 监控文件夹里面的变化
- 无法删除文件夹的几种解决方法
- 遍历文件夹得到文件夹里面特定的格式
- 解决Linux中文乱码
- 用缓冲技术提高JSP程序的性能和稳定性
- 页面跳转
- SEO优化的内部链接和外部链接策略
- 键鼠模拟的妙用
- 监控特定文件夹的事件:三种解决方法汇总
- javascript实现div的拖动并调整大小
- qpopper rpm 安装出错
- 存放所有程序标题的表
- 使用SQL SERVER存储过程实现银行转账业务
- SQLServer2000同步复制技术实现步骤
- HttpChannel 与 TcpChannel
- VSS-打标签自动发邮件的功能
- 函数调用堆栈分析