如何用API函数判断文件是否存在?(50分)

  • 主题发起人 主题发起人 true_afei
  • 开始时间 开始时间
T

true_afei

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有Windows API函数集阿
 
用FileExists 函数检查文件是否存在
 
好像是fileexists,win32函数集肯定有,你在网上搜索<br>是chm格式的帮助文件
 
FileExists<br>btw<br>在delphi的帮助里找FileExists<br>里面有一个专题,列出了几十个相关函数<br>关于目录和文件的操作几乎都有了<br>
 
用API判断文件是否存在<br>function FileExistsAPI(const FileName:string):boolean;<br>var hf:hFile; &nbsp; <br>begin<br>&nbsp; hf:=CreateFile(PChar(FileName),GENERIC_READ,FILE_SHARE_READor FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);<br>&nbsp; Result:=not(hf=INVALID_HANDLE_VALUE);<br>&nbsp; if Result then Result:=GetLastError=0 else CloseHandle(hf);<br>end;
 
对,就是他们说的。
 
Avenir,你的做法很好的呀!向您致敬,并学习之!
 
呵呵,还说“做法很好”,很明显存在漏洞嘛!<br>没必要多说,自己去看看CreateFile的说明吧,总之判断部分应该这样写:<br><br>Result := (hf &lt;&gt; INVALID_HANDLE_VLAUE) or (GetLastError &lt;&gt; ERROR_ACCESS_DENIED);
 
FileExists是Delphi提供的函数在SysUtils单元定义的<br>function FileAge(const FileName: string): Integer;<br>var<br>&nbsp; Handle: THandle;<br>&nbsp; FindData: TWin32FindData;<br>&nbsp; LocalFileTime: TFileTime;<br>begin<br>&nbsp; Handle := FindFirstFile(PChar(FileName), FindData);<br>&nbsp; if Handle &lt;&gt; INVALID_HANDLE_VALUE then<br>&nbsp; begin<br>&nbsp; &nbsp; Windows.FindClose(Handle);<br>&nbsp; &nbsp; if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);<br>&nbsp; &nbsp; &nbsp; if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,<br>&nbsp; &nbsp; &nbsp; &nbsp; LongRec(Result).Lo) then Exit;<br>&nbsp; &nbsp; end;<br>&nbsp; end;<br>&nbsp; Result := -1;<br>end;<br><br>function FileExists(const FileName: string): Boolean;<br>begin<br>&nbsp; Result := FileAge(FileName) &lt;&gt; -1;<br>end;<br><br>WinAPI有相同功能的函数名字为:FindFirstFile和FindFirstFileEx<br>
 
api:PathFileExists.<br>属于shell组
 
多人接受答案了。
 
后退
顶部