监控特定文件夹的事件:三种解决方法汇总
调用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工具用的是虚拟驱动。