捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
TFileSystemWatcher 文件监视组件
关键字:TFileSystemWatcher FileNotify 文件监视
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:高级 完成时间:2007/6/21
发布者:solokey 发布时间:2007/7/30
编辑器:DELPHI5 语  种:简体中文
分 类:系统 下载浏览:2270/14416
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
与.net中的FileSystemWatcher组件功能近似,可以监视文件删除,添加,修改等等.
先解释一个问题.有人也许将监视选项全开,然后修改了文件内容,OnChange事件会被多次调用.这个是没错的.

因为修改了文件内容.File_Size,File_Last_Access,File_Name_Change,均可能按一定顺序被触发.Add_File是最明显的,除了File_Added好象有3个之多,有兴趣可以都尝试一下.

只有Renamed才会有FileName2,其他都只有FileName1.
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论12条 当前显示最后6条评论
zhuixin 2007/10/11 1:36:40
怎么缺少组件啊?怎么回事?
solokey 2007/11/1 0:59:46
修正一个BUG...看了MSDN才知道...是byte...
procedure TShellChangeThread.DoIOCompletionEvent;
var
  TempBuffer: TNotificationBuffer;
  FileOpNotification: PFileNotifyInformation;
  Offset: Longint;
  FileName1, FileName2: string;
  FileOperation: TFileOperation;
  procedure DoDirChangeEvent;
  begin
    if Assigned(ChangeEvent) and FActived then
      ChangeEvent(FileOperation, FileName1, FileName2);
  end;
  function  CompleteFileName(const FileName:string):string;
  begin
    Result := '';
    if Trim(FileName) <> '' then
      Result := FDirectory + FileName;
  end;
begin
  Lock;
  TempBuffer := FNotificationBuffer;
  FillChar(FNotificationBuffer, SizeOf(FNotificationBuffer), 0);
  Unlock;
  Pointer(FileOpNotification) := @TempBuffer[0];
  repeat
    with FileOpNotification^ do begin
      Offset := NextEntryOffset;
      FileName2 := '';
      case Action of
        FILE_ACTION_ADDED..FILE_ACTION_MODIFIED: begin
          FileName1 := CompleteFileName(WideCharLenToString(@FileName, FileNameLength div SizeOf(WideChar)));
          FileOperation := TFileOperation(Action - 1);
          DoDirChangeEvent;
        end;
        FILE_ACTION_RENAMED_OLD_NAME: begin
          FileName1 := CompleteFileName(WideCharLenToString(@FileName, FileNameLength div SizeOf(WideChar)));
          FileOperation := TFileOperation(Action - 1);
        end;
        FILE_ACTION_RENAMED_NEW_NAME: begin
          if FileOperation = foRenamed then begin
          FileName2 := CompleteFileName(WideCharLenToString(@FileName, FileNameLength div SizeOf(WideChar)));
          DoDirChangeEvent;
          end;
        end;
      end;
    end;
  Pointer(FileOpNotification) := Pointer(PChar(FileOpNotification) + OffSet);
  until Offset=0;
end;
86652764 2008/7/4 13:43:33
zhuixin 31398  2007-10-11 1:36:40 
怎么缺少组件啊?怎么回事? 
要自己新建一件dpk
再把FileSystemWatcher.pas添加一下.
new --->package
aa5058362 2008/7/25 9:42:19
说两句
skywings 2009/4/11 16:56:41

 封装的还不错,顶一下。不过,我在使用中发现不能满足需要,如果能对具体的文件监

视,那就更好了。比如:文件的大小,最后更新日期发生了变化,则发出通知。

在torry Delphi网站有个同样封装api的类似组件则可以实现上述功能。

分享一下。
http://www.torry.net/vcl/filedrv/notification/ATFileNotification.zip
xmcore 2021/2/14 18:01:10
先通过FileSystemWatcher.pas安装TFileSystemWatcher控件,我选择FileSystemWatcher.pas,安装组件,DELPHI XE7 编译在这一行时提示错误,GetQueuedCompletionStatus(TempCompletionPort, numBytes, CompletionKey, PFOverlapped, INFINITE); 有谁知道是什么原因呢,谢谢!
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表