![]() |
Delphi-Version: 10.1 Berlin
Nochmal FileAge
Hallo Leute,
ich weiß, dass war hier schon Thema.
Delphi-Quellcode:
Wie zu sehen ist, unterscheidet sich die überladene Version auch im Rückgabewert!
procedure TForm1.Button1Click(Sender: TObject);
var dt: TDateTime; s: string; begin if ofd.Execute then begin FileAge(ofd.FileName, dt); // dt:= FileDateToDateTime(FileAge(ofd.FileName)); DateTimeToString(s,'dd/mm/yyyy hh/mm/ss',dt); label1.Caption := s; end; end; Jetzt meine Frage: ich habe oft die alte Version benutzt, die der Compiler als "veraltet" bezeichnet. Sollte oder muss ich das ändern, weil das "alte" FileAge in Zukunft vielleicht wegfällt. Gruß Willie. |
AW: Nochmal FileAge
Abgesehn davon dass der "Integer" der alten Version ein paar "unglückliche" Beschränkungen hat, kannst das Alte natürlich noch so lange benutzen, wie es noch nicht rausgeflogen ist (und Delphi ist sehr langsam, mit sowas wie Altes raus oder Neues rein)
Oder wie wäre es mit den Dateidatumsfunktionen aus ![]() Du kannst dir natürlich auch ein eigenes FileAge bauen, was TDataTime als Result hat und dass intern die neue Version von ![]() Und dann bauchst nur noch FileDateToDateTime(FileAge durch deine neue Version zu ersetzen. ABER was du unbedingt tuen solltest, ist das "Result" des neuen FileAge prüfen, denn ist das False, dann ist der Datumswert undefiniert (per Definition ungültig/zufällig oder sonstwas). z.B. bei IF NOT das Datum auf einen Standardwert ala 0 setzen oder eine Exception werfen. PS: Mit FormatDateTime gibt es hier ebenfalls eine Variante direkt mit Sting als Result. |
AW: Nochmal FileAge
Hallo Himitsu,
ich will die vielen Warnungen ernst nehmen und werde mir ein neue function FileAge bauen mit Rückgabewert TDateTime. Da kann ich den Quelltext einfacher anpassen. Noch 'ne Frage: was kann denn beim Auslesen des File-Datum schief gehen, klar die Datei muss vorhanden sein, aber was denn sonst? Ich habe es ausprobiert, bei falschem Dateinamen gibt das neue FileAge false und FileDateTime = 0 zurück, das finde ich in Ordnung. Kann ich das so machen? function FileAge(const fn: TFilename): TDateTime; overload; begin if not FileAge(fn, Result) then Result := 0; end; Willie. |
AW: Nochmal FileAge
Joar, Datei vorhanden,
Verzeichnis richtig, Pfad eventuell zu lang ungültige Zeichen, fehlende Rechte (Verzeichnis lesen dürfen), und ein ungültiges Datum (ist zwar selten, aber kann auch mal passieren, z.B. nach Hardware-/Softwaredefekt, Virenbefall oder Stromausfall) Zitat:
Hast du irgendwo mal die DateUtils nach deiner Unit in den Uses, in der dein FileAge deklatiert ist, dann wird das falsche FileAge verwendet. Und da Integer sich an TDateTime zuweisen lässt (andersrum würde es knallten Float-zu-Integer) gäbe der Compiler keine Warung, wenn er statt deiner Funktion das uralte Original nimmt. Unterschiedliche Parameter (alles was ohne DEFAULT ist) oder ein anderer Name, damit es eindeutig zugeordnet werden kann. |
AW: Nochmal FileAge
Zitat:
Willie. |
AW: Nochmal FileAge
Wenn du es überall mit Namespace verwendest, dann wäre es auch eindeutig. (nur einmal ohne Namespace/Unitname verwendet ... kann schief gehn)
[add] TFile.GetCreationTime(const Path: string): TDateTime; TFile.GetCreationTimeUtc(const Path: string): TDateTime; TFile.GetLastAccessTime(const Path: string): TDateTime; TFile.GetLastAccessTimeUtc(const Path: string): TDateTime; ![]() TFile.GetLastWriteTimeUtc(const Path: string): TDateTime; |
AW: Nochmal FileAge
Jetzt will ich es wissen:
Delphi-Quellcode:
Bei der zweiten Methode muss ich IOUtils einbinden.
function FileAge(const fn: TFilename): TDateTime; overload;
begin if not FileAge(fn, Result) then Result := 0; end; function File_Age(const fn: TFilename): TDateTime; begin try Result := TFile.GetCreationTime(fn); except Result := 0; //jeder Fehler wird auf 0 gesetzt! end; end; Sind die beiden Methoden jetzt gleichwertig? W. |
AW: Nochmal FileAge
Hallo Himitsu,
danke für deine Geduld. Willie. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz