Thema: Delphi Fileage ist veraltet

Einzelnen Beitrag anzeigen

Roachford
(Gast)

n/a Beiträge
 
#15

Re: Fileage ist veraltet

  Alt 24. Sep 2008, 11:02
Ok, dann mal ins Detail:

Die alte Funktion hat dir die TFileTime als Result zurück gegeben. Das Result (TFileTime) ist ein Fliesskommawert und somit birgt dies Probleme, weil was geschieht, wenn die Datei nicht gefunden wird? Dann wird ein definierter Rückgabewert zurück gegeben und auf den müsste der Aufrufer testen. Da wir aber alle wissen, ist ein Vergleich von Fliesskommawerten mit gewissen Problemen gebunden, die durch die Darstellung der Fliesskommazahlen im digitalen System einhergeht. Und da die wenigsten den Rückgabewert mit SameValue() vergleichen sondern lieber direkt, birgt dies eine grosse Gefahrenquelle.

Abhilfe hat CodeGear dadurch geschaffen, dass sie den Rückgabewert auf Boolean geändert haben und die FileTime als Argument zurück geben. Damit kann der Aufrufer eindeutig erkennen, ob die Dateizeit ermittelt werden konnte. Und dadurch ist die zurück gegebene Zeit auch immer nur dann gültig, wenn die Funktion true zurück gibt. Damit entfällt der Fliesskommavergleich komplett und es ist sicher geworden.

Zitat von Klaus01:
Delphi-Quellcode:
var
  Testdatum : TDateTime;

If FileDateToDateTime(FileAge(Serverpfad + SearchRec.name,TestDatum)) < (Date - 60) then
begin
  DeleteFile();
end;
Ui, ein Boolean mit einer Zeit vergleichen? Und wozu dann noch die Variable?

Hier nochmal richtig:

Delphi-Quellcode:
var
  Testdatum : TDateTime;

If FileAge(Serverpfad + SearchRec.name, TestDatum) and
   ( FileDateToDateTime(Testdatum ) < (Date - 60) ) then
begin
  DeleteFile();
end;
@DeddyH: Sorry, aber ich mach das zu gerne...
  Mit Zitat antworten Zitat