Hallo,
folgender Code soll den Inhalt eines Ordners auslesen, die gefundenen
Dateien in einer Listbox darstellen und nach jeder gefundenen
Datei eine Message mit Erstellungsdatum, letztes Zugriffsdatum, letzter Schreibzugriff und Dateinamen anzeigen.
Delphi-Quellcode:
function GetFileDate(const FileName: string; out Creation, LastAccess,
LastWrite: TDateTime): Boolean;
var
hFile: THandle;
ftCreationUTC, ftLastAccessUTC, ftLastWriteUTC: TFileTime;
ftCreationLocal, ftLastAccessLocal, ftLastWriteLocal: TFileTime;
stCreationLocal, stLastAccessLocal, stLastWriteLocal: TSystemTime;
begin
result:=false;
hFile := CreateFile(PChar(FileName), GENERIC_READ, 0, nil,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if (hFile <> INVALID_HANDLE_VALUE) then begin
try
//Ermittlung des Dateidatums in UTC (Weltzeit)
if GetFileTime(hFile, @ftCreationUTC, @ftLastAccessUTC, @ftLastWriteUTC) then begin
//Umrechnung in Ortszeit
if FileTimeToLocalFileTime(ftCreationUTC, ftCreationLocal)
and FileTimeToLocalFileTime(ftLastAccessUTC, ftLastAccessLocal)
and FileTimeToLocalFileTime(ftLastWriteUTC, ftLastWriteLocal) then begin
//Umwandlung in Systemdatumformat
if FileTimeToSystemTime(ftCreationLocal, stCreationLocal)
and FileTimeToSystemTime(ftLastAccessLocal, stLastAccessLocal)
and FileTimeToSystemTime(ftLastWriteLocal, stLastWriteLocal) then begin
//Zuweisung der Rückgabewerte
Creation := SystemTimeToDateTime(stCreationLocal);
LastAccess := SystemTimeToDateTime(stLastAccessLocal);
LastWrite := SystemTimeToDateTime(stLastWriteLocal);
result:=true;
end;
end;
end;
finally
CloseHandle(hFile);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FindFirst('C:\Dokumente und Einstellungen\mega\Eigene Dateien\Homepage' +
'\*.*', faAnyFile, SearchRec);
repeat
ListBox1.items.add(searchrec.Name);
GetFileDate(searchrec.Name, erstellung, zugriff, schreibzugriff);
ShowMessage('Erstellung: '+DateTimeToStr(erstellung)+#13#10+'Letzter Zugriff: '+
DateTimeToStr(zugriff)+#13#10+'Letzter Schreibzugriff: '+DateTimeToStr(schreibzugriff)+
#12#10+'Dateiname: '+ searchrec.Name);
until FindNext(searchrec) <> 0;
findclose(searchrec);
end;
Das Problem ist, das er bei allen Daten, die er anzeigen soll, immer 30.12.1899 anzeigt!
Wie kann das sein? Soooo alt sind meine Daten nun auch wieder nicht....
Gruß zebrafalke