API函数ReadDirectoryChangesW 监视目录

转载 2012年03月22日 11:25:38
API函数ReadDirectoryChangesW 监视目录
2011-02-15 7:42

对指定的一个目录进行监控,当该目录中有文件发生改变,并通知处理。 Windows提供了对文件和目录监控的系统服务,并且为应用程序提供了两个API函数,它们分别是:FindFirstChangeNotification和ReadDirectoryChangesW。由于通过FindFirstChangeNotification函数只能监控到某一目录下有文件发生改变,而不能监控到具体是哪一文件发生改变,所以本人选用ReadDirectoryChangesW函数。该函数的定义为:

第一个参数是要监控目录的句柄,可以通过指定目录名,利用CreateFile函数的返回值获得。用户代码通过第二个和第三个参数来告知操作系统该把目录变化通知放在首地址为返回信息指针, 一块内存长度区域当中的。但是该内存又是怎样组织的呢?操作系统是把他们放在FILE_NOTIFY_INFORMATION这个结构里面的: 

这是一个自定义结构,第一个字段存储了要获得下一个记录需要跳过多少字节数,如果它的值为0,就表示本记录已经是最后一条记录了。该字段其实也可以看作是一个指向下一条记录的指针。第二个字段的含义是:本次通知了哪种类型的目录变化。第三个字段表示的是变化的文件名称的长度。第四个字段是一个存放变化的文件名称的Unicode字符数组的首地址。

  另外一个与本系统有关的参数是类型过滤器。它是目录变化通知过滤器。要监控文件名发生变化,此参数应设为FILE_NOTIFY_CHANGE_FILE_NAME;文件被非法改写为FILE_NOTIFY_CHANGE_LAST_WRITE等等。根据过滤器的设置,ReadDirectoryChangesW函数可以监控文件名改变、文件属性改变、文件大小改变、文件内容被改写、文件被删除等多种类型的变化。

  利用ReadDirectoryChangesW函数实现对一个目录进行监控的。具体的做法是:首先使用CreateFile获取要监控目录的句柄;然后在一个判断循环里面调用ReadDirectoryChangesW,并且把自己分配的用来存放目录变化通知的内存首地址、内存长度、目录句柄传给该函数。用户代码在该函数的调用中进行同步等待。当目录中有文件发生改变,控制函数把目录变化通知存放在指定的内存区域内,并把发生改变的文件名、文件所在目录和改变通知处理。

利用此API写的文件目录事件监视器:

文件夹监视及文件删除的简易方法

文件夹监视及文件删除的简易方法这几天学习了一些关于文件的操作,在这里做个总结。  我想实现这样的功能:当特定的文件夹Pic当检测到有文件(保证传进来的是图片)进来时,得到该文件的绝对路径,并把它传入v...
  • I_code
  • I_code
  • 2011年03月03日 13:08
  • 2717

windows api 实现删除指定目录下的所有文件(包括子文件夹下的所有文件)

转载自http://blog.csdn.net/jaff20071234/article/details/6559533 有一个CFileFind相关的示例,但因这部分功能需要放在服务器端,故用...
  • qq61394323
  • qq61394323
  • 2013年12月14日 15:39
  • 4662

理解 ReadDirectoryChangesW

理解 ReadDirectoryChangesW 原作者:Jim Beveridge 原文:http://qualapps.blogspot.com/2010/05/understanding-...
  • flyingleo1981
  • flyingleo1981
  • 2015年07月15日 15:38
  • 1533

windows api 实现删除指定目录下的所有文件(包括子文件夹下的所有文件)

windows  api实现了这个功能,代码如下: [cpp] view plaincopy BOOL IsDirectory(const char *pDir)   {   ...
  • yzsyb
  • yzsyb
  • 2013年07月12日 17:10
  • 749

完成端口+目录监控(ReadDirectoryChangesW)

  • 2009年08月04日 13:08
  • 53KB
  • 下载

文件夹监控源码(API函数ReadDirectoryChangesW 监视目录)

对指定的一个目录进行监控,当该目录中有文件发生改变,并通知处理。 Windows提供了对文件和目录监控的系统服务,并且为应用程序提供了两个API函数,它们分别是:FindFirstChangeNoti...
  • liangquan05170139
  • liangquan05170139
  • 2010年07月28日 10:29
  • 2708

理解 ReadDirectoryChangesW

理解 ReadDirectoryChangesW 原作者:Jim Beveridge 原文:http://qualapps.blogspot.com/2010/05/understanding-...
  • wzsy
  • wzsy
  • 2011年08月18日 11:24
  • 9475

windows下文件的监控--ReadDirectoryChangesW函数的使用

最近在做一个项目,其中涉及到监控指定目录下所有文件和子目录内的修改信息。经过一番努力,总算实现这一功能,在此特别感谢那些帮助过我的朋友和同事们。今天整理一下这几天的收获,列出相关的知识点,供后来者参考...
  • woshinia
  • woshinia
  • 2012年11月08日 16:49
  • 13530

监控目录文件变化的ReadDirectoryChangesW 函数学习总结

客户端监控被监控目录(含所有子目录)下的变化,我们可以采用ReadDirectoryChangesW 函数 ,该函数实现对指定的目录进行监控,并且返回详细的文件变化信息。 函数原型: BOOL W...
  • peixuan197
  • peixuan197
  • 2013年11月20日 10:38
  • 1049

ReadDirectoryChangesW 写成的 文件监控类

名称:CDirectoryWatch IDE:VS2013 功能: 1. 可开启多个文件监控。 2. 提供监控通知处理接口,使每个监控有单独的 处理函数 其他: 1. 使用异步ReadDirector...
  • MeeSong
  • MeeSong
  • 2014年12月22日 22:48
  • 1876
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:API函数ReadDirectoryChangesW 监视目录
举报原因:
原因补充:

(最多只允许输入30个字)