Alter einer Datei abfragen



  • Ich möchte wissen, ob eine Datei älter ist als 10 Minuten.
    Deren Zeitstempel, seit der letzten Änderung, erhalte ich mit:

    int fileDate = FileAge(FileName);
    

    Aber ich finde nichts, womit ich den aktuellen Zeitstempel meines Systems bekomme.

    int sysDate = ???();
    

    Ich wollte dann

    Diff = (sysDate - fileDate) / 60;
    if (Diff >= 10) ShowMessage("Datei zu alt.");
    

    Kann mir da jemand helfen? Danke.





  • Einmal nimmst du

    FileDateToDateTime(fileDate)
    

    um dein Datum in ein TDateTime zu bekommen.

    und

    Now()
    

    liefert ist ein TDateTime das dir den aktuellen Zeitpunkt liefert.



  • HoursBetween kenne ich nicht und mein BCB5 auch nicht.
    Wie man auf den Zeitstempel der aktuellen Zeit kommt würde mir eigentlich dicke reichen. 🙄



  • @hellic

    Bringt mir leider garnix.

    int fileDate = FileAge(FileName);
    int Diff = FileDateToDateTime(fileDate) - Now();
    Caption = IntToStr(Diff);
    

    Das DateTime Format peil ich nichtmal annähernd

    0 30.12.1899, 0:00
    2.75 1.1.1900, 18:00
    -1.25 29.12.1899, 6:00
    35065 1.1.1996, 0:00

    Gibt es keine Funktion für einen Zeitstempel oder kennt diesen nur keiner?



  • Die Klasse TDateTime ist für einen Zeitstempel.Sie enthält Datum und Uhrzeit.

    Einfach mal einen Blick in die Hilfe werfen

    int Diff = FileDateToDateTime(fileDate) - Now();
    

    Dann solltest du dir anschauen, was die Funktionen so zurückliefern. Ein int bei einem Zeitvergleich???



  • Christian211 schrieb:

    Ein int bei einem Zeitvergleich???

    Wo steht da ein Vergleich?
    Ich mache bissle mit PHP und da ist ein Timestamp ein INT.

    int time ( void )
    time -- Gibt den gegenwärtigen Unix-Timestamp/Zeitstempel zurück
    Gibt die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück.

    Ich habe natürlich zuerst in die Hilfe geschaut, mich darauf nochmals hinzuweisen bringt mich jetzt wahrlich nicht wirklich weiter. 😞 😕



  • Das DateTime Format peil ich nichtmal annähernd

    Ist keine Frage

    Wie man auf den Zeitstempel der aktuellen Zeit kommt würde mir eigentlich dicke reichen.

    Das wurde dir nun schon mehrmals

    - durch meinen Link
    - durch Code hier gezeigt

    aber nun nochmal:

    TDateTime AktDatumUndUhrzeit=Now();
    

    Ich habe natürlich zuerst in die Hilfe geschaut,...

    Die Plätze für den Hellseherlehrgang sind leider schon alle weg gewesen. Ich kann, da du es nicht mitteilst, nicht wissen, was du gelesen, probiert, gemacht hast.

    Ich mache bissle mit PHP und da ist ein Timestamp ein INT.

    Nun machst du ein bissele im C/C++ und ist beipielsweise TDateTime ein double -> was ja in der Hilfe steht, die du ja gelesen hast, aber nicht nutzen willst?



  • Danke für den Link, aber wie ich schon erwähnte gibt es MinutesBetween scheinbar nicht in CBC5. Daher nutzt mir dein Link nicht wirklich etwas.
    Auch sagte ich das ich TDateTime nicht verstehe was es denn überhaupt zurückliefert. Der Timestamp den ich kenne sind Sekunden und damit lässt sich einfach rechnen. Hier kann ich aus dem double die in der Hilfe stehen garnix auslesen und wüsste demzufolge nicht was ich damit anfangen sollte.

    FloatToStr(Now() = 38815,4773687037

    Also was sollte mir der bisherige Text bringen? Im übrigen steht nirgends in der Hilfe das TDateTime ein double ist. Man kann es sich nur denken wenn man die oben genannten Beispielzeilen sich anschaut. Nichts destotrotz sagt einem das double garnix.

    Wenn du es verstehst, würde mich eine Aufklärung freuen.
    Finds aber schwach das FileAge ein integer Timestamp zurückgibt und es scheinbar kein integer Timestamp der aktuellen Zeit gibt.

    Hätte niemals gedacht das es so kompliziert ist an eine Lösung zu kommen. 😞



  • Verstehe das nicht: Du hast doch die Hilfe gelesen:

    Ein Aufruf ohne Argumente erzeugt ein TDateTime-Objekt, dessen Datenelement Val den Wert 0 hat. Diese Datums- und Uhrzeitangabe entspricht 30.12.1899 00:00.

    Wird im Aufruf für den Parameter src ein TDateTime-Objekt angegeben, wird eine Kopie von src (dem Kopierkonstruktor) erzeugt.

    Wird im Aufruf für den Parameter src ein TDateTimeBase-Objekt angegeben, hat das resultierende Objekt denselben Wert wie der Parameter src. TDateTimeBase ist die Basisklasse des Typs TDateTime. Sie enthält als einziges Element das als public deklarierte Feld Val, das den Wert des Objekts darstellt.

    Wird im Aufruf für den Parameter src ein double- oder Integerwert angegeben, hat das resultierende Objekt denselben Wert wie der Parameter src. Der ganzzahlige Anteil von src ist die Anzahl der Tage, die seit dem 30.12.1899 vergangen sind. Der Bruchteil gibt die Uhrzeit an.



  • Was verstehst du daran nicht, dass er einfach nur einen UNIX-Timestamp der momentanen Zeit haben will?



  • Willst du mich veräppeln oder was soll das werden?

    Ich suchte keine TDateTime Lösung, sondern einen integer Timestamp.
    Da FileAge einen solchen liefert, sollte es auch sowas für das aktuelle Datum geben.

    Deine Ersatzlösung mit einem anderen Weg mag ja nett gemeint sein, aber bringt nicht viel wenn die entsprechenden Funktionen fehlen.

    Der Hinweis auf die Hilfe ohne wirklich weiter was dazu zu sagen halte ich für absolut nutzlos, dann kann man den Beitrag sich auch stecken. Wer die Hilfe nicht liest hat Pech falls dort eine Lösung steht und falls nicht kann man davon ausgehen das derjenige damit nicht klarkam und es wird nicht besser indem man immer und immer wieder neu darauf verweist.

    Den netten Text den da so schön zitierst kenne ich nicht, ohne Quellenangabe auch schwer zu finden. Unter meiner TDateTime Hilfe steht er jedenfalls nicht und auch so sagt er mir garnix.

    Ich werde wohl weiter googlen müssen, der antwortet wenigstens in einer neutralen Art und nicht das man sich wie der letzte Sack vorkommt. 👎



  • Wie man an einen Zeitstempel kommt wurd doch nunmehrfach gepostet.

    Das es ein UNIX -Zeistempel sein soll (wozu eigentlich) kann ich so nicht erkennen.

    Da ich keine Lösung gepostet habe, liegt daran, dass ich den BCB 2006 nutze und ich keine Überblick habe, welche Funktionen nun auch 5er kompatibel sind.

    Des Weiteren kann er ja wohl kaum in die Hilfe geschaut haben, wenn der Eingangstext zu TDateTime "bei ihm nicht vorhanden ist"

    Jedenfalls würde er mit der Methode

    int FileDate ();
    

    der Klasse TDateTime

    einen int Wert im Betriebssystemformat bekommen -> was auchmit einem Blick in die Hilfe zu erkennen ist.



  • Hier geht es doch primär um den Vergleich 2er Datums/Zeitwerte. Es ist absolut unverständlich, dass das im UNIX Format passieren muss. Ein Vergleich ist mit TDateTime ebenso (einfach -> wie gezeigt) möglich. Ich kann nicht glauben, dass diese Funktionen erst im BCB 6 oder 2006 dazu gekommen sind.



  • Bei allem Respekt Staufenberg, aber ich muss Christian zustimmen. Dein Problem solltest du mit Hilfe der hier genannten Aspekte ohne weiteres lösen können und das ist ja schließlich das Ziel eines Threads hier.
    Jemand hat ein Problem und macht einen Thread auf und ein Anderer schenkt ihm Ansätze zur Lösung des Problems. Das hat Christian getan. Natürlich kannst du "deinen Weg" fordern, solltest aber auch andere Möglichkeiten würdigen und in betracht ziehen. Und auch ich denke, dass ein UNIX-Timestamp hier nicht notwendig ist.

    mfg cb



  • Wieso kommt ständig das "Verlgiechen" ? Ich sagte jetzt doch schon zwei mal das ich wissen will ob die Datei älter ist als 10Minuten. Wo ist das ein Vergleich? Das einfachste der Welt die differenz in Sekunden und fertig. Was ist daran unverständlich?

    Zu dem Rest sag ich nix mehr, das mir absolut zu doof was ihr hier abzieht.



  • Irgendwo wirst du doch mal - wie auch immer - programmiern müssen

    Wenn (Aktuelles_Datum-Datei_Datum > 10 Minuten)
    dann....

    Das ist ein Vergleich. Oder wie willst du dass sonst machen ohne Vergleich?



  • Staufenberg schrieb:

    Zu dem Rest sag ich nix mehr, das mir absolut zu doof was ihr hier abzieht.

    Gleich passiert dir hier das gleiche wie deinem Namensvetter im Juli '44.

    Was ist daran so schwer ?

    int fileDate=FileAge(filename);
    int sec = SecondsBetween(Now(),FileDateToDateTime(fileDate));
    


  • Ups übersehen. Du verwendest ja den Oldie Nr.5 😃



  • Christian211 schrieb:

    Wenn (Aktuelles_Datum-Datei_Datum > 10 Minuten)

    Ja und was sind nun 10min in TDateTime Format?

    @hellic
    Namensähnlichkeiten waren nicht beabsichtigt! Und warum mir? Bisher bekomme ich nur "lies die Hilfe" und Funktionen die mein Compiler nicht kennt. Über die zynischen herablassenden Kommentare mal nebensächlich. Ist Internet und manches kann man da einfach falsch verstehen.

    Aber soviele Beiträge ohne mal ein konkretes Beispiel, wo man es doch soviel schlauer weiss........................

    Hat keiner eine Ahnung wie man das aktuelle Datum in DOS Timestamp bekommt? 😮


Anmelden zum Antworten