监控特定文件夹的事件:三种解决方法汇总
来源:互联网 发布:软件开发设计培训 编辑:程序博客网 时间:2024/05/22 04:43
监控特定文件夹的事件:三种解决方法汇总
LDBIVR程序中要监视特定文件夹的文件落地或者删除事件,本来要用SHELL中的事件通知机制,后来因为要考虑到各种意外事件,如服务意外退出、服务器崩溃等,遂作罢。
对于目录事件异步通知,大致有三个方法:
调用Windows的api函数ReadDirectoryChanges监视指定目录中文件(推荐使用),这个使用异步IO:
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:
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 :
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的事件监控
- 监控文件夹里面的变化
- 无法删除文件夹的几种解决方法
- 遍历文件夹得到文件夹里面特定的格式
- JOSSO运行配置
- 进程地址空间[2]
- findfirst函数的用法
- 正确安装vmware tools(debian)
- 怀旧电影 -- 《郝邵文\释小龙影集》
- 监控特定文件夹的事件:三种解决方法汇总
- 不带表头节点的冒泡排序算法
- ACE Thread Manage
- Django tutorial(1)【翻译】编写第一个Django app,第一部分——创建项目
- 如何确定安装了哪些版本的 .NET Framework 以及是否应用了 Service Pack
- 日子过得太快了.不知明年我在做什么,都没有勇气去想了.
- C#绘制曲线图和柱状图的方法
- 自定义控件在 控件在 VS 工具箱 中的图标
- 使用iconv进行内码转换(Big5->GB2312)