Frage

Ich möchte ein Dateien diese Attribute als ganzzahlige Werte erhalten.

War es hilfreich?

Lösung

Delphians neigen dazu, den Ansatz zu Findfirst zu mögen (die SearchRec Struktur einige von denen hat), aber ich würde die Win32-API-Funktion GetFileAttributesEx vorschlagen.

Andere Tipps

Versuchen

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

Von SysUtils.

Von der DSiWin32 Freeware-Bibliothek:

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 }

Das sollte funktionieren, und es ist nativen Delphi-Code.

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.Time ist seit veraltet, Hilfe-Datei sagt Verwenden F.TimeStamp.
Nur zu aktualisieren diese durch spätere Versionen von Delphi

könnten Sie rufen die GetFileInformationByHandle winapi Funktion. Aparently JCL hat eine GetFileLastWrite Funktion können Sie auch

verwenden könnte

System.IOUtils tun, um eine TFile Rekord für immer Dateialter mit mehreren Funktionen, z GetCreationTime, GetLastAccessTime, GetLastWriteTime

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top