Fileexists:当文件存在时,返回TRUE,反之,返回FALSE。
但若一个文件存在,有没可能返回FALSE?比如,有其他进程正在对此文件进行操作。

解决方案 »

  1.   

    看它源码啊
    function FileAge(const FileName: string): Integer;
    var
      Handle: THandle;
      FindData: TWin32FindData;
      LocalFileTime: TFileTime;
    begin
      Handle := FindFirstFile(PChar(FileName), FindData);
      if Handle <> INVALID_HANDLE_VALUE then
      begin
        Windows.FindClose(Handle);
        if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
        begin
          FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
          if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
            LongRec(Result).Lo) then Exit;
        end;
      end;
      Result := -1;
    end;
    我贴了源码上来你不怪我吧~~
      

  2.   

    如果文件存在
    返回之应该是true;
    但是当创建临时文件,而且没有完全创建成功是,返回之可能为false
    举个例子来说
    winexec(pchar('command.com /C ping '+host+'>temp.txt'),SW_HIDE);
    if not fileexists('c:\temp.txt') then
      sleep(3000);
    //这里的sleep(3000)是等待文件创建成功
    try 
      memo1.lines.loadfromfile('C:\temp.txt');
     except
     end;
      
      

  3.   

    FileExists有BUG,会出现你说的情况,不过不是打开的情况,而是你在Win2000下面,如果你判断%Windir%下的文件,就会返回False!
      

  4.   

    >>但若一个文件存在,有没可能返回FALSE?比如,有其他进程正在对此文件进行操作。我试了用记事本文件,没有发现你说的情况。
      

  5.   

    当时的情况是APP甲有一个TIMER每3分钟扫描一次这个文件,将内容读出,而APP乙则去改写这个文件(间隔时间不定的)。
    操作系统是2000,单CPU,我觉得应该不会同时出现两个线程对文件进行操作,而且APP甲也只是读而已(在读文件时是做了异常处理的),现在的问题就是FILEEXISTS函数并没有异常,而是返回FALSE。这个我就觉得很疑惑了。