请问:怎样才能监测到文件是否被修改?(50分)

  • 主题发起人 主题发起人 sw
  • 开始时间 开始时间
S

sw

Unregistered / Unconfirmed
GUEST, unregistred user!
大家都知道,几乎每个编辑器都有这样的功能,比如:用Word打开一个文件,再用另一个编辑器<br>也打开刚才那个文件,改动并存盘,切换回Word,这时,会弹出一个对话框,说这个文件已经被<br>修改,问你是否重新装入?<br><br>请问,在程序中接收什么消息才能监测到文件是否被修改?谢谢!
 
去 http://www.delphipages.com/result.cfm?ID=1829 下载这个组件包<br><br>这个组件包中有一个组件叫:TabfFolderMonitor可能可以实现你的功能。<br><br>不过,我没用过,我估计就是几个Windows函数,但是我没有研究过。<br><br>希望能帮上你
 
我估计就是拦截了系统的什么消息,会者不难,快来人啊!
 
在RxLib和Delphi6中都有这样的控件,你自己看看就知道了。
 
查看文件最后修改时间
 
to zwk6608:<br>&nbsp; &nbsp;这是什么方法,不与考虑,不过还是谢谢!<br>&nbsp; &nbsp;可以肯定的是一定是拦截了什么消息!!
 
获得此文件的信息<br>function IsFileInUse(fName : string) : boolean;<br>var<br>&nbsp; &nbsp;HFileRes : HFILE;<br>begin<br>&nbsp; &nbsp;Result := false;<br>&nbsp; &nbsp;if not FileExists(fName) then<br>&nbsp; &nbsp; &nbsp; exit;<br>&nbsp; &nbsp;HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);<br>&nbsp; &nbsp;Result := (HFileRes = INVALID_HANDLE_VALUE);<br>&nbsp; &nbsp;if not Result then<br>&nbsp; &nbsp;CloseHandle(HFileRes);<br>end;<br>
 
一点个人想法:<br>首先通过获取WM_ACTIVATEAPP消息,程序可以判断哪个窗口是激活的,哪个是非激活的;<br>这样非激活窗体可以通过通知消息(Notification message),拦截EN_CHANGE消息得以判<br>断被激活窗体的编辑框中的文本是否已更新。然后通过拦截WM_SYSCOMMAND消息 获知窗体<br>的切换,由此完成所有信息传递过程。<br>
 
楼上有误,但是是一种方法。<br>这个的主题就是关于文件通知的处理。API中有比较详细的解释,看就完了。去吧。
 
我也有一个想法:前提条件是:用于打开文件的Application是你写的.<br><br>1.Application 打开一个文件后做个标记.eg : ModiFlg :=False<br>2.一旦在运行过程中有任何改变文件的行为,都去改变: ModiFlg := true<br>3.Application 结束时检查ModiFlg,作出回应.<br><br><br>
 

Similar threads

回复
0
查看
848
不得闲
D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
后退
顶部