监控特定文件夹改变

来源:互联网 发布:前瞻数据库靠谱吗 编辑:程序博客网 时间:2024/05/21 09:59

监控特定文件夹的事件:三种解决方法汇总

调用Windowsapi函数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

);

 

 

或者用SHChangeNotifyRegisterSHChangeNotifyDeregister来注册事件SHChangeNotify

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shchangenotify.asp

 

SHChangeNotify Function


Notifiesthe system of an event that an application has performed. Anapplication should use this function if it performs an action that mayaffect 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 FindCloseChangeNotificationFindNextChangeNotification WaitForSingleObject

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findfirstchangenotification.asp

FindFirstChangeNotification

The FindFirstChangeNotificationfunction creates a change notification handle and sets up initialchange notification filter conditions. A wait on a notification handlesucceeds when a change matching the filter conditions occurs in thespecified directory or subtree. However, the function does not indicatethe 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工具用的是虚拟驱动。