AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Änderungsdatum ist seeehr merkwürdig
Thema durchsuchen
Ansicht
Themen-Optionen

Änderungsdatum ist seeehr merkwürdig

Ein Thema von zebrafalke · begonnen am 20. Jul 2006 · letzter Beitrag vom 20. Jul 2006
Antwort Antwort
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 18:27
Die variable hat wohl den wert 0 (was 30.12.1899) entspricht.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 18:28
Hi,

das Problem ist, er findet deine Datei gar nicht....

Der Searchrec.name hält nicht den Verzeichnispfad, sondern nur den Dateinamen.
Du muss also deiner Funktion noch den Pfad voransetzen.

Du hast extra eine Funktion gebaut mit result = false/true, fragst aber das Ergebnis gar nicht ab.
Würdest Du das tun, könntest Du sehen, das immer false zurückkommt.

Übergebe mal GetFiledate (verzeichnis + searchrec.name,....) und prüfe das Ergebnis.

Gruss

Thomas
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von zebrafalke
zebrafalke

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

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 19:04
Jo, jetzt, funktionierts, danke!

Warum erscheinen am Anfang der Listbox eigendlich immer zwei Einträge nur mit Punkten?

gruss
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 19:08
Hallo,
Zitat von zebrafalke:
Warum erscheinen am Anfang der Listbox eigendlich immer zwei Einträge nur mit Punkten?
Kennst Du Dich mit Dateisystemen aus?
Der erste Eintrag (ein Punkt) steht für das aktuelle Verzeichnis.
Der zweite Eintrag (zwei Punkte) steht für das übergeordnete Verzeichnis.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von zebrafalke
zebrafalke

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

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 19:13
Hmm, klingt logisch...wäre nurnoch die Frage, wie unterbinde ich das Auftreten dieser Punkte?
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 19:16
Delphi-Quellcode:
  if (Filename <> '.') and (Filename <> '..') then
  begin
    showmessage(filename);
  end;
  Mit Zitat antworten Zitat
Benutzerbild von zebrafalke
zebrafalke

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

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 19:25
Das geht leider nicht, er meint TSearchRec und String wären inkompatible Typen. Kann man nicht von vornherein verhindern, das die Punkte übergaupt erst auftauchen und sie halt nicht hinterher wegzumachen???
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 19:28
Nein, kann man nicht. Und:

if (searchrec.name<>'.') and (searchrec.name<>'..') then...
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von zebrafalke
zebrafalke

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

Re: Änderungsdatum ist seeehr merkwürdig

  Alt 20. Jul 2006, 19:56
Vielen Dank, jetzt klappts!

Gruß
zebrafalke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz