블로그 이미지
세상살아가는 여러가지 이야기
by 헤르미트

NOTICE

CALENDAR

«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
  • Total :
  • Today :  | Yesterday :

CATEGORY

분류 전체보기 (32)
만년필과 친구들 (9)
Programing (6)
휴대용 장치들 (6)
Windows (3)
잡담 (8)

RECENT ARTICLE

RECENT COMMENT

ARCHIVE



https://codeday.me/ko/qa/20190516/558084.html

 

델파이 – FileExists 및 수정 날짜 관련 문제 - 코드 로그

내 서버에는 수정 날짜 31 / DEC / 1979 (이유를 묻지 않음) 파일이 몇 개 있습니다. 따라서 FileExists는 false를 반환합니다. Sysutils.FileExists는 다음과 같습니다. function FileAge(const FileName: string): Integer; var Handle: THandle; FindData: TWin32FindData; LocalFileTime: TFileTime; begin Handle :=

codeday.me

위 사이트가 문제의 현상을 잘 설명하였는데 2021.03.17 현재 접속이 안되는군요. 그래서 단편적인 정보지만 그래도 문제의 핵심을 잘 지적한 게시글을 연결합니다.

http://www.delmadang.com/community/bbs_view.asp?bbsNo=19&bbsCat=46&indx=445458&keyword1=%C1%A4%BB%F3%C0%FB%C0%B8%B7%CE&keyword2=

 

* 문제의 해결책을 제시해놓은 게시글입니다.

https://stackoverflow.com/questions/13959187/issue-with-fileexists-and-modified-date

 

//======
// 존재하는 파일을 없다는 오류 판정이 나와 
// RadStudio 10 에 있는 FileExists 함수로 대체합니다. 

//=== 

function FileExists(const FileName: string): Boolean;
{$IFDEF MSWINDOWS}

  function ExistsLockedOrShared(const Filename: string): Boolean;
  var
    FindData: TWin32FindData;
    LHandle: THandle;
  begin
    { Either the file is locked/share_exclusive or we got an access denied }
    LHandle := FindFirstFile(PChar(Filename), FindData);
    if LHandle <> INVALID_HANDLE_VALUE then
    begin
      Windows.FindClose(LHandle);
      Result := FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0;
    end
    else
      Result := False;
  end;

var
  Code: Integer;
  LastError: Cardinal;
begin
  Code := Integer(GetFileAttributes(PChar(FileName)));
  if Code <> -1 then
    Result := (FILE_ATTRIBUTE_DIRECTORY and Code = 0)
  else
  begin
    LastError := GetLastError;
    Result := (LastError <> ERROR_FILE_NOT_FOUND) and
      (LastError <> ERROR_PATH_NOT_FOUND) and
      (LastError <> ERROR_INVALID_NAME) and ExistsLockedOrShared(Filename);
  end;
end;
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
begin
  Result := euidaccess(PChar(FileName), F_OK) = 0;
end;
{$ENDIF LINUX}

//function FileExists(const FileName: string): Boolean;
//{$IFDEF MSWINDOWS}
//begin
//  Result := FileAge(FileName) <> -1;
//end;
//{$ENDIF}
//{$IFDEF LINUX}
//begin
//  Result := euidaccess(PChar(FileName), F_OK) = 0;
//end;
//{$ENDIF}

 

And