VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
[C++]监控特定文件夹的事件:三种解决方法汇总

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

 

LDBIVR程序中要监视特定文件夹的文件落地或者删除事件,本来要用SHELL中的事件通知机制,后来因为要考虑到各种意外事件,如服务意外退出、服务器崩溃等,遂作罢。

对于目录事件异步通知,大致有三个方法:

调用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


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 FindCloseChangeNotificationFindNextChangeNotification 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:《请问如何监视系统对文件的访问?》。




相关文章

相关软件