Delphi-PRAXiS

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)

SaFu 24. Sep 2008 10:31


Fileage ist veraltet
 
Mosche

Bekomme die Warnung "Fileage ist veraltet" hab jetzt gelesen das es neue Version von Fileage gibt.

Aber ich denke das ich es richtig geschriben habe. Kann mir einer sagen wo der fehler liegt.

Delphi-Quellcode:
If FileDateToDateTime(FileAge(Serverpfad + SearchRec.name)) < (Date - 60) then
 begin
  DeleteFile();
 end;

Gruss Sascha

TeronG 24. Sep 2008 10:38

Re: Fileage ist veraltet
 
Zitat:

Zitat von fuknersascha
Kann mir einer sagen wo der fehler liegt.

KLAR!

Zitat:

Zitat von fuknersascha
Aber ich denke das ich es richtig geschrieben habe. Kann mir einer sagen wo der Fehler liegt.

:mrgreen:


:duck:

Luckie 24. Sep 2008 10:40

Re: Fileage ist veraltet
 
Es ist ja kein Fehler, sondern eine Warnung.

SaFu 24. Sep 2008 10:41

Re: Fileage ist veraltet
 
@TeronG
Hahahaha

Ich bekomm dich auch noch.

Witzbold :zwinker:

@Luckie

Ja stimmt, aber die würde ich gerne wegbekommen

Roachford 24. Sep 2008 10:45

Re: Fileage ist veraltet
 
Ein einziger Blick in die Hilfe zu der Funktion würde dir die Lösung bringen.

SaFu 24. Sep 2008 10:49

Re: Fileage ist veraltet
 
Wie gsagt ich glaub ich steh da auf dem Schlauch

Delphi-Quellcode:
Fileage(String;TDateTime)
Hab ich doch

Roachford 24. Sep 2008 10:51

Re: Fileage ist veraltet
 
Zitat:

Zitat von fuknersascha
Wie gsagt ich glaub ich steh da auf dem Schlauch

Delphi-Quellcode:
Fileage(String;TDateTime)
Hab ich doch

Hast du eben nicht. Schau nochmal nach, zähle die Argumente und dann behaupte das nochmal...

Klaus01 24. Sep 2008 10:51

Re: Fileage ist veraltet
 
Zitat:

Zitat von fuknersascha
Wie gsagt ich glaub ich steh da auf dem Schlauch

Delphi-Quellcode:
Fileage(String;TDateTime)
Hab ich doch

Inn Deinem Aufruf aber nicht.

Grüße
Klaus,

DeddyH 24. Sep 2008 10:52

Re: Fileage ist veraltet
 
Wenn da steht, die Funktion ist veraltet, wird es wohl eine neuere geben, die man stattdessen verwenden sollte. Das ist kein Fehler und hat mit der Aufruf-Syntax nichts zu tun. Sagt die Hilfe denn nicht, wie die andere Funktion heißt?

Roachford 24. Sep 2008 10:54

Re: Fileage ist veraltet
 
Zitat:

Zitat von DeddyH
Wenn da steht, die Funktion ist veraltet, wird es wohl eine neuere geben, die man stattdessen verwenden sollte. Das ist kein Fehler und hat mit der Aufruf-Syntax nichts zu tun. Sagt die Hilfe denn nicht, wie die andere Funktion heißt?

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

HeikoAdams 24. Sep 2008 10: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 10: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 11: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 11: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 11: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 11: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 11: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 12: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 12: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 12: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 04:53 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