监控特定文件夹的事件:三种解决方法汇总
2009-01-07 14:08
721 查看
监控特定文件夹的事件:三种解决方法汇总
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 |
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工具用的是虚拟驱动。
相关资源:[/b]
1:《监视程序的编制》;
2:《Win32中的目录监控》;
3:《change journals》;
4:《CDirectoryChangeWatcher - ReadDirectoryChangesW all wrapped up》;
5:《监测目录活动》;
6:《请问如何监视系统对文件的访问?》。
相关文章推荐
- [C++]监控特定文件夹的事件:三种解决方法汇总
- [C++]监控特定文件夹的事件:三种解决方法汇总
- [C++]监控特定文件夹的事件:三种解决方法汇总
- [C++]监控特定文件夹的事件:三种解决方法汇总
- [C++]监控特定文件夹的事件:三种解决方法汇总
- 监控特定文件夹的事件:三种解决方法汇总
- Win8系统在同一个窗口不能打开新文件夹的三种解决方法
- Ubuntu死机解决方法汇总
- VBA遍历文件夹的三种方法(转载)
- js处理一个div里面多个点击事件时出现的事件冲突 重复的解决方法 事件冒泡
- JAVA事件处理的三种不同方法
- Io 异常: The Network Adapter could not establish the connection的三种解决方法
- u盘中毒,文件夹不见了的解决方法
- jQuery的三种bind/One/Live事件绑定使用方法
- js onmousewheel事件多次触发问题解决方法
- Android Studio安装遇到的问题及解决方法汇总
- IE8及以下 attr给标签追加onclick事件失效解决方法
- 对话框处理TAB按键事件的三种方法
- 解决swfupload上传控件文件名中文乱码问题 三种方法
- .net实现松耦合事件的三种方法