search keywords "ReadDirectoryChangesW", find some demo.
好理解的demo:
<<Spying a file system>> : http://www.codeproject.com/KB/files/FileSpyArticle.aspx
没有使用overlapped, 有少许的内存泄漏.
tips:
FindFirstChangeNotification, FindNextChangeNotification and FindCloseChangeNotification, 只能侦测到目录是否有文件改变的通知, 无法具体到某个文件. 如果需要知道哪个文件被改变了,需要自己去遍历, 效率相当的低.
CreateFile, ReadDirectoryChangesW, CloseHandle, 可以将文件通知具体到每个文件. 效率高.
因为没有使用overlapped, 导致被监测的文件不能重命名.
不好理解的demo:
<<CDirectoryChangeWatcher - ReadDirectoryChangesW all wrapped up>>http://www.codeproject.com/KB/files/directorychangewatcher.aspx
使用了overlapped, 可以对文件进行改名. 符合实际应用.
按照directorychangewatcher整理出一个不需要窗口句柄的Demo, 发现如果操作大量的文件, 文件通知的不全.
如果操作单个文件, 效果很好.
<2011_0919>
早上遇到同事,讨论了这个问题。他以前做过这个问题的预言, 也发现如果一次操作的文件多了,是会有遗漏的文件通知发生。真正要解决这个问题,是在驱动层去做这事才靠谱.