Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fileage ist veraltet (https://www.delphipraxis.net/121234-fileage-ist-veraltet.html)

HeikoAdams 24. Sep 2008 11:55

Re: Fileage ist veraltet
 
Die Suche nach Hier im Forum suchenFileage AND veraltet könnte helfen - die Frage gab es schon 2x :dp:

SaFu 24. Sep 2008 11:58

Re: Fileage ist veraltet
 
Und genau daran hängt es, ich komm einfach nicht darauf.

Für mich sieht die neue Funktion wie die alte aus.

Und die 2 Stück habe ich auch schon gesehen aber werde nicht schlau daraus.

Klaus01 24. Sep 2008 12:01

Re: Fileage ist veraltet
 
Delphi-Quellcode:
var
  Testdatum : TDateTime;

If (FileAge(Serverpfad + SearchRec.name,TestDatum) and (TestDatum < (Date - 60)) then
begin
  DeleteFile();
end;

DeddyH 24. Sep 2008 12:02

Re: Fileage ist veraltet
 
Zitat:

Zitat von Roachford
Die neue heisst genauso und ist überladen und genau deshalb liegt es an der Aufrufsyntax. Also nochmal zurück zum Anfang und dann erneut argumentieren...

Klugscheißer :mrgreen: Ich habe auf der Firma nur Delphi 5 zur Verfügung, da kann ich nicht nachsehen.

Roachford 24. Sep 2008 12:02

Re: Fileage ist veraltet
 
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:

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...

Klaus01 24. Sep 2008 12:06

Re: Fileage ist veraltet
 
Zitat:

Zitat von Roachford
Ui, ein Boolean mit einer Zeit vergleichen? Und wozu dann noch die Variable?

habe es oben schon korregiert.

Grüße
Klaus

SaFu 24. Sep 2008 12:09

Re: Fileage ist veraltet
 
Delphi-Quellcode:
var
  Testdatum : TDateTime;

If FileAge(Serverpfad + SearchRec.name, TestDatum) and ( FileDateToDateTime(Testdatum ) < (Date - 60) ) then
begin
  DeleteFile();
end;
Ahh ok das Datum der Datei wir ins Testdatum übergeben und dadurch verglichen.

Hab ich gemacht, geht net

Inkompatible Typen Integer und TDateTime

DeddyH 24. Sep 2008 13:19

Re: Fileage ist veraltet
 
Ich habe gerade die neue Syntax nicht zur Verfügung, aber müsste Testdatum nicht integer sein?

Roachford 24. Sep 2008 13:21

Re: Fileage ist veraltet
 
Delphi-Quellcode:
var
  Testdatum : TDateTime;

If FileAge(Serverpfad + SearchRec.name, TestDatum) and ( Testdatum < (Date - 60) ) then
begin
  DeleteFile();
end;
Das Problem liegt nicht bei Delphi-Referenz durchsuchenFileAge(), sondern bei Delphi-Referenz durchsuchenFileTimeToDateTime(). Diese Umwandlung wird von FileAge() nun schon durchgeführt.

SaFu 24. Sep 2008 13:28

Re: Fileage ist veraltet
 
Danke für die ganzen Anworten jetzt funktioniert es und ich habe es verstanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz