在Win2K下如何实时检测某个文件是否更新?(100分)

  • 主题发起人 主题发起人 yfchengxixi
  • 开始时间 开始时间
Y

yfchengxixi

Unregistered / Unconfirmed
GUEST, unregistred user!
在Win2K下如何实时检测某个文件是否更新?[8D]
 
function tform1.IsFileInUse(fName : string) : boolean; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//判断一个文件是否正在被使用<br>var<br>HFileRes : HFILE;<br>begin<br>Result := false;<br>if not FileExists(fName) then<br>exit;<br>HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);<br>Result := (HFileRes = INVALID_HANDLE_VALUE);<br>if not Result then<br>CloseHandle(HFileRes);<br>end;<br><br>function Tform1.GetFileLastAccessTime(sFileName:string;uFlag:integer):TDateTime; &nbsp; &nbsp;//获得文件的创建、修改及最后访问时间<br>var<br>&nbsp; ffd:TWin32FindData;<br>&nbsp; dft:DWord;<br>&nbsp; lft:TFileTime;<br>&nbsp; h:THandle;<br>begin<br>&nbsp; h:=FindFirstFile(PChar(sFileName),ffd);<br>&nbsp; if h&lt;&gt;INVALID_HANDLE_value then<br>&nbsp; begin<br>&nbsp; case uFlag of<br>&nbsp; &nbsp; 1:FileTimeToLocalFileTime(ffd.ftCreationTime,lft);<br>&nbsp; &nbsp; 2:FileTimeToLocalFileTime(ffd.ftLastWriteTime,lft);<br>&nbsp; &nbsp; 3:FileTimeToLocalFileTime(ffd.ftLastAccessTime,lft);<br>&nbsp; else<br>&nbsp; &nbsp; FileTimeToLocalFileTime(ffd.ftLastAccessTime,lft);<br>&nbsp; end;<br>&nbsp; FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo);<br>&nbsp; Result:=FileDateToDateTime(dft);<br>&nbsp; windows.FindClose(h);<br>&nbsp; end<br>&nbsp; else<br>&nbsp; result:=0;<br>end;<br><br><br>
 
楼上的大虾,还有更好的办法吗?我还有100的,到时我全部给你啦!!!!!!!
 
刚看到你的题目,第一反映就是:<br>你希望系统主动告诉你有文件更新(更新的意思有点模糊)。<br>在window中此类工作归Shell处理,且shell提供了不少扩展<br>方法供你的应用程序使用,其中的Copy hook handler可能可以<br>满足你的要求,当文件夹或打印机的对象被移动、拷贝、<br>删除、重命名时它允许你的程序通过或禁止这样的操作。<br>请在msdn中查找Copy hook handler关键字。<br><br>提示:shell提供的大部分功能是用com实现的,想必你对com已经非常的了解。
 
后退
顶部