CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

如何实现对文件、文件夹修改的感知

楼主zxtyhy(地图鱼)2006-03-18 15:40:11 在 Delphi / Windows SDK/API 提问

类似windows资源管理器,当有文件被其他程序删除时,资源管理器会自动感知  
  请高手赐教 问题点数:100、回复次数:16Top

1 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 16:04:36 得分 0

可能需要用到Timer了Top

2 楼zxtyhy(地图鱼)回复于 2006-03-18 16:18:55 得分 0

ShellChangeNotifier如何使用?Top

3 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 16:26:12 得分 0

监测目录/文件的变化:  
  Root设置要监测的目录;  
  WatchSubTree设置是否要监测子目录;  
  NotifyFilters设置要监测的变化事件:  
  nfFileNameChange       -   文件名改变  
  nfDirNameChange         -   目录名改变  
  nfAttributeChange     -   属性改变  
  nfSizeChange               -   大小改变  
  nfWriteChange             -   写入  
  nfSecurityChange       -   安全性改变(可能是指NT/2000/XP上的安全性吧)  
  只要控件监测到你设置的变化,就会产生OnChange事件。Top

4 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 16:28:13 得分 0

然后在OnChange事件里面写程序Top

5 楼zxtyhy(地图鱼)回复于 2006-03-18 16:56:49 得分 0

能得到哪些文件改变了吗?Top

6 楼BlueTrees(蜗牛)回复于 2006-03-18 16:58:11 得分 30

给你一个API,是windows基础服务,即使没有shell也能使用。  
   
  FindFirstChangeNotification  
   
  这些API可以监视内核对象的变化,也就是可以监视文件夹,文件的改变。Top

7 楼zxtyhy(地图鱼)回复于 2006-03-18 17:07:31 得分 0

Api函数如何使用?能给点提示吗?  
  另外能不能得到被改变的文件、文件夹的名称。  
  难道要再遍历一边文件列表才能知道是哪里变化了吗?Top

8 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 17:26:27 得分 40

FindFirstChangeNotification的用法是这样的:  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
    var  
      stat:DWORD;  
      hd:THANDLE;  
  begin  
      hd:=FindFirstChangeNotification('e:\temp',false,FILE_NOTIFY_CHANGE_FILE_NAME);  
      if   hd=INVALID_HANDLE_VALUE   then  
      begin  
          ShowMessage(   Syserrormessage(getlasterror()));  
          Exit;  
      end;  
      while   true   do  
          begin  
          stat:=WaitForSingleObject(hd,$ffffffff);  
          if   stat   =0   then  
          begin  
              ShowMessage('有文件改变');  
                    FindCloseChangeNotification(hd);   //关闭句柄  
              exit;  
          end;  
      end;  
  end;Top

9 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-18 17:36:50 得分 0

这里有一个Demo  
  http://www.fltvu.com/jiaocheng/chenxu1/DELPHI/vcl/file/discmon.zipTop

10 楼zxtyhy(地图鱼)回复于 2006-03-18 20:48:30 得分 0

只是想得到被改变的文件或文件夹的名称!!!  
  只知道某个文件夹下的文件被改变了,有什么用!如果该文件夹下有1万个文件,你怎么找出那些文件被改变了,每次都要查一遍,速度如何保证???Top

11 楼lianshaohua(永远深爱一个叫“...”的好女孩儿!)回复于 2006-03-18 22:52:37 得分 0

学习一下,,,....Top

12 楼apple800(老五)回复于 2006-03-19 12:50:12 得分 0

学习Top

13 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-03-21 15:45:36 得分 20

API:ReadDirectoryChangesW  
  see   MSDN   for   more   infoTop

14 楼zxtyhy(地图鱼)回复于 2006-03-21 23:05:54 得分 0

ReadDirectoryChangesW只是对NT系统的吧  
  问题还是没解决啊,  
  要支持所有windows系统  
  Top

15 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-22 07:03:27 得分 10

http://www.sysinternals.com/Utilities/Filemon.html  
  scroll   down   to   "How   FileMon   Works"  
  Top

16 楼Blakhawk(黑鹰)回复于 2006-03-22 15:09:35 得分 0

cuteant(我这张旧船票能否登上你的破船|涛声是否依旧)   (   )   信誉:100     2006-3-18   17:36:51     得分:   0      
   
  你那个DEMO里头少一个文件,BrowseDr.pas   。能不能传上来看看。Top

相关问题

  • 修改文件夹名称
  • 如何修改文件夹属性?
  • FSO怎么修改文件夹名称?
  • 怎样修改文件夹名字
  • 修改文件夹的图标
  • 如何实现文件夹删除或新增的感知
  • monitor文件夹.
  • 有修改文件夹名的函数么?
  • 怎样调用api修改文件夹图标
  • 再线等候,如何修改文件夹的名字

关键词

  • 文件
  • 文件夹
  • 监测
  • api
  • 改变
  • findfirstchangenotification
  • hd
  • 设置
  • 变化
  • stat

得分解答快速导航

  • 帖主:zxtyhy
  • BlueTrees
  • cuteant
  • ly_liuyang
  • jiangsheng

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo