델파이에서 파일의 생성/마지막 수정 날짜를 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/144453

  •  02-07-2019
  •  | 
  •  

문제

이 속성을 정수 값으로 파일을 가져오고 싶습니다.

도움이 되었습니까?

해결책

Delphians는 FindFirst 접근 방식을 좋아하는 경향이 있지만 (SearchRec 구조에는 일부가 있습니다) Win32 API 기능 GetFileAttriptribex를 제안합니다.

다른 팁

노력하다

function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;

sysutils에서.

로부터 DSIWIN32 프리웨어 도서관 :

function DSiFileTimeToDateTime(fileTime: TFileTime; var dateTime: TDateTime): boolean;
var
  sysTime: TSystemTime;
begin
  Result := FileTimeToSystemTime(fileTime, sysTime);
  if Result then
    dateTime := SystemTimeToDateTime(sysTime);
end; { DSiFileTimeToDateTime }

function  DSiGetFileTimes(const fileName: string; var creationTime, lastAccessTime,
  lastModificationTime: TDateTime): boolean; 
var
  fileHandle            : cardinal;
  fsCreationTime        : TFileTime;
  fsLastAccessTime      : TFileTime;
  fsLastModificationTime: TFileTime;
begin
  Result := false;
  fileHandle := CreateFile(PChar(fileName), GENERIC_READ, FILE_SHARE_READ, nil,
    OPEN_EXISTING, 0, 0);
  if fileHandle <> INVALID_HANDLE_VALUE then try
    Result :=
      GetFileTime(fileHandle, @fsCreationTime, @fsLastAccessTime,
         @fsLastModificationTime) and
      DSiFileTimeToDateTime(fsCreationTime, creationTime) and
      DSiFileTimeToDateTime(fsLastAccessTime, lastAccessTime) and
      DSiFileTimeToDateTime(fsLastModificationTime, lastModificationTime);
  finally
    CloseHandle(fileHandle);
  end;
end; { DSiGetFileTimes }

이것은 작동해야하며 기본 델파이 코드입니다.

function GetFileModDate(filename : string) : integer;
var
  F : TSearchRec;
begin
  FindFirst(filename,faAnyFile,F);
  Result := F.Time;
  //if you wanted a TDateTime, change the return type and use this line:
  //Result := FileDateToDatetime(F.Time);
  FindClose(F);
end;
function GetFileModDate(filename : string) : TDateTime;
var
   F : TSearchRec;
begin
   FindFirst(filename,faAnyFile,F);
   Result := F.TimeStamp;
   //if you really wanted an Int, change the return type and use this line:
   //Result := F.Time;
   FindClose(F);
end;

F. 타임은 이후 더 이상 사용되지 않았다고 Help File은 F.Timestamp를 사용한다고 말합니다.
이후 버전의 델파이로 인해 이것을 업데이트하려면

당신은 전화 할 수 있습니다 getFileInformationByHandle Winapi 기능. 무자비하게 JCL 당신이 사용할 수있는 getfilelastwrite 기능이 있습니다

System.ioutils는 파일 연령을 얻기위한 여러 기능을 갖춘 TFILE 레코드를 가지고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top