12 Stimmen

Wie man Erstellungs-/Letzte-Änderungsdaten einer Datei in Delphi erhält?

Ich möchte die Attribute dieser Datei als Ganzzahlenwerte erhalten.

4 Stimmen

Warum ein Integer, was ist falsch an TDateTime?

15voto

Toon Krijthe Punkte 51819

Versuchen Sie

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

Aus SysUtils.

1 Stimmen

Veraltet zum Zeitpunkt dieses Kommentars.

0 Stimmen

FileAge() gibt das ERSTELLUNGSDATUM der Datei zurück, nicht das ÄNDERUNGSDATUM.

0 Stimmen

@JerryGagnon - Nein, es verwendet _WIN32_FILE_ATTRIBUTE_DATA.ftLastWriteTime

13voto

OregonGhost Punkte 22841

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

9voto

gabr Punkte 26255

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 }

3 Stimmen

Warum var und nicht Out-Parameter - du scheinst den Wert, der übergeben wird, nicht zu verwenden?

1 Stimmen

Gültiger Punkt. Ich bin ein 'alter Schule' Programmierer, ich habe es gelernt, bevor 'out' erfunden wurde und ich benutze automatisch 'var' in allen Fällen.

5voto

Ian Murphy Punkte 43
Funktion GetFileModDate(Dateiname: string): TDateTime;
var
   F: TSearchRec;
begin
   FindFirst(Dateiname, faAnyFile, F);
   Result := F.TimeStamp;
   // wenn Sie wirklich eine ganze Zahl wollten, ändern Sie den Rückgabetyp und verwenden Sie diese Zeile:
   //Result := F.Zeit;
   FindClose(F);
end;

F.Time wurde inzwischen verworfen, die Hilfedatei sagt, verwenden Sie F.TimeStamp.
Nur zur Aktualisierung aufgrund späterer Versionen von Delphi

5voto

thvedel Punkte 31

System.IOUtils haben tatsächlich einen TFile-Datensatz mit mehreren Funktionen zum Abrufen des Dateialters, z.B. GetCreationTime, GetLastAccessTime, GetLastWriteTime

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X