AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980

Ein Thema von juergen · begonnen am 21. Apr 2011 · letzter Beitrag vom 29. Dez 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980

  Alt 23. Apr 2011, 11:52
@himitsu,
verspätete Antwort:
Nein, die überladene Version von FileAge gibt es in meiner Delphiversion noch nicht.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#12

AW: Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980

  Alt 23. Apr 2011, 12:13
Also in meinem D2007prof gibt es die neuere überladene Version. Würde mich wundern, wenn bei Dir nicht...
Delphi-Quellcode:
function FileAge(const FileName: string): Integer; overload; deprecated;
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean; overload;
Aber TDateTime bleibt sowieso auf 1899 begrenzt.

Geändert von Satty67 (23. Apr 2011 um 12:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980

  Alt 23. Apr 2011, 15:44
@Satty67,
danke für den Hinweis.
Ich hab's jetzt gesehen, dass das überladene FileAge direkt unter dem alten FileAge in der SysUtils steht...
Ich hatte erwartet, dass NUR die alte Version oder NUR die neue Version zu finden ist und aus diesem Grunde nicht weiter gesucht...
Sorry.

Delphi-Quellcode:
function FileAge(const FileName: string): Integer; overload;
{$IFDEF MSWINDOWS}
var
  FindData: TWin32FileAttributeData;
  LocalFileTime: TFileTime;
begin
  if GetFileAttributesExFunc(Pointer(Filename), GetFileExInfoStandard, @FindData) then
  begin
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    begin
      FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
      if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
        LongRec(Result).Lo) then Exit;
    end;
  end;
  Result := -1;
end;
{$ENDIF}
{$IFDEF LINUX}
var
  st: TStatBuf;
begin
  if stat(PChar(FileName), st) = 0 then
    Result := st.st_mtime
  else
    Result := -1;
end;
{$ENDIF}

{$IFDEF MSWINDOWS}
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
var
  FindData: TWin32FindData;
  LSystemTime: TSystemTime;
  LocalFileTime: TFileTime;
begin
  Result := False;
  if GetFileAttributesExFunc(Pointer(Filename), GetFileExInfoStandard, @FindData) then
  begin
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    begin
      Result := True;
      FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
      FileTimeToSystemTime(LocalFileTime, LSystemTime);
      with LSystemTime do
        FileDateTime := EncodeDate(wYear, wMonth, wDay) +
          EncodeTime(wHour, wMinute, wSecond, wMilliSeconds);
    end;
  end;
end;
{$ENDIF}
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Jürgen Paulus

Registriert seit: 28. Sep 2010
Ort: Wien
10 Beiträge
 
Delphi 2010 Professional
 
#14

AW: Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980

  Alt 29. Dez 2011, 13:26
Hallo Leute, ich bin gerade dabei, Dateien in einem Verzeichnis automatisch umzunennen und aufsteigend zu nummerieren. Die erste Nummer soll die Datei sein, die zuerst am letzten Tag gespeichert wurde. Also, wenn die zuletzt gespeicherte Datei das Datum "29.12.2011 12:30" hat, dann soll mit der Datei begonnen werden, die am "29.12.2011" zuerst gespeichert wurde.

Wie auch immer, dazu brauche ich das Erstellungsdatum der Datei. Leider funktioniert in Delphi 7 (XP) sowie auch in Delphi 2010 (W7) keine einzige der Methoden bzw. Funktionen die hier in diesem Forum vorgestellt wurden. Bei vielen Dateien bekomme ich immer ein anderes Datum extrahiert als das tatsächliche Erstellungsdatum. Inzwischen habe ich mein Problem mit Hilfe der ShellApi und dem DOS-Aufruf "dir *.* /o-s > myList.txt" gelöst. Schön ist das natürlich nicht, deswegen die Frage an euch, ob ihr noch eine andere Möglichkeit kennt, das Erstellungsdatum einer Datei herauszulesen.

Werte Grüße
Jürgen
Jürgen Paulus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

AW: Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980

  Alt 29. Dez 2011, 13:46
Leider funktioniert in Delphi 7 (XP) sowie auch in Delphi 2010 (W7) keine einzige der Methoden bzw. Funktionen die hier in diesem Forum vorgestellt wurden. Bei vielen Dateien bekomme ich immer ein anderes Datum extrahiert als das tatsächliche Erstellungsdatum.
Du wertest aber auch das Erstellungsdatum aus? (es gibt ja mehrere Angaben >erstellt/geändert/gelesen< und nicht alle werden von allen Dateisystemen gleichermaßen unterstützt)

Auch sollte man uch Zeitzonen beachten.

Einige Dateisysteme speichern die Zeitzone (inkl. Sommerzeit) und Andere machen das nicht.
Einige Funktionen, zum auslesen der Zeiten, versuchen die Zeitzonen nachträglich rasuszurechnen (egal ob sie überhaupt gespeichert wurde) und Andere machen das nicht.

Zitat:
Leider funktioniert in Delphi 7 (XP) sowie auch in Delphi 2010 (W7) keine einzige der Methoden bzw. Funktionen die hier in diesem Forum vorgestellt wurden.
Was heißt für dich "funktionieren"?

Geben die ein "falsches"/anderes Datum aus,
oder geben sie garkein Datum aus (also absoluten Schrott und nicht im Ansatz stimmige Werte)
oder bekommst du gar Exceptions, bzw. andere Fehlercodes?

Diese Werte kann man softwareseitig auch verändern, weshalb man diese Angaben nicht überbewerten sollte.
$2B or not $2B

Geändert von himitsu (29. Dez 2011 um 13:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:41 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