不用FileExists,就用Windows API能否判断c:\a.txt是否存在?

解决方案 »

  1.   

    SysUtils中的实现:function FileExists(const FileName: string): Boolean;
    begin
      Result := FileAge(FileName) <> -1;
    end;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.   

    Delphi自带的FileExists有问题,时常文件存在却判断为不存在
    下面我给一段CPP的代码,如果需要的话就自己改一下就成Delphi的了,现在有点忙,Sorry!bool __fastcall FileExists(AnsiString FileName)
    {
       HANDLE FileHandle = CreateFile(FileName.c_str(),
                                      NULL,
                                      FILE_SHARE_READ |
                                      FILE_SHARE_WRITE,
                                      NULL,
                                      OPEN_EXISTING,
                                      FILE_ATTRIBUTE_ARCHIVE |
                                      FILE_ATTRIBUTE_HIDDEN |
                                      FILE_ATTRIBUTE_NORMAL |
                                      FILE_ATTRIBUTE_READONLY |
                                      FILE_ATTRIBUTE_SYSTEM,
                                      NULL
                                     );
       if (FileHandle == INVALID_HANDLE_VALUE)
          return false;
       CloseHandle(FileHandle);
       return true;
    }