Einzelnen Beitrag anzeigen

Benutzerbild von zebrafalke
zebrafalke

Registriert seit: 25. Feb 2006
155 Beiträge
 
Turbo Delphi für Win32
 
#1

Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 18:16
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
  Mit Zitat antworten Zitat