Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Test, ob Datei aktualistert ist (https://www.delphipraxis.net/137160-test-ob-datei-aktualistert-ist.html)

aaaaaaaaaa_10 15. Jul 2009 10:51


Test, ob Datei aktualistert ist
 
Hallo,

Ich lese aus einer Datei die erste und letzt Zeile und schreibe diese in eine neue Datei.
Nun das Problem:
Die erstel Zeile ist fest, aber die letzte Zeile ändert sich immer in der gegebenen Datei.
Jetzt will ich herauskriegen wann sich die Datei geändert hat um die neue letzte Zeile in meiner Datei hinten anzuhängen.

Wie kann ich testen, ob die Datei sich geändert hat? Über einen Timer? Oder wie?

Luckie 15. Jul 2009 10:57

Re: Test, ob Datei aktualistert ist
 
Man könnte in regelmäßigen Intervallen einen hashwert bilden und diesen mit dem vorherigen vergleichen. Unterscheiden sie sich, hat sich die Datei geändert. Problem ist, dass wenn der Intervall zu groß ist, die Datei schon mehrere Änderungen erfahren haben könnte. Man müsste also bei einer Änderung noch in der datei gucken, was sich geändert hat, ob nur eine zeile dazu gekommen ist oder in der Zwischenzeit schon wieder drei oder vier oder fünf.

Schöner wäre es, wenn du eine Benachrichtigung bekämst, wenn sich die Datei geändert hat. Gibt es da eine Möglichkeit? Ist das Programm, was die Datei ändert auch von dir oder hast du Zugriff auf den Quellcode?

Stormy 15. Jul 2009 11:03

Re: Test, ob Datei aktualistert ist
 
Hi,

lese doch vorher via TWin32FindData die Zeit des letzten Dateichanges aus (ftLastWriteTime) und prüfe dann aller X Sekunden z.B. mit einem Timer ob sich da was gändert hat.


Gruß
Stormy

himitsu 15. Jul 2009 11:04

Re: Test, ob Datei aktualistert ist
 
Für einen Hashwert, müßte er die ganze Datei erstmal auslesen (also der Code, welcher den Hash bildet)

Hier würde es aber reichen, wenn er nur die letze Zeile ausließt und sie mit der Letzen in seiner Datei vergleicht.

Vorher könnte an vermutlich (hoffentlich) auch einfach nur mal die Änderungszeit der Datei auslesen,

bzw. sich über änderungen im Verzeichnis informieren lassen ... man könnte sich ja über Änderungen am Dateisystem informieren lassen.
Wie oft wird denn die Datei geändert? (letzeres hilft ja nur was, wenn sich die Datei wärend der Laufzeit deines Programmes ändert)

peschai 15. Jul 2009 11:04

Re: Test, ob Datei aktualistert ist
 
Hallo,
Es gäbe auch noch die elegante Möglichkeit, daß dir as Betriebssystem hilft -> Directory notification.

Luckie 15. Jul 2009 11:06

Re: Test, ob Datei aktualistert ist
 
Ändert nichts an dem zweiten Problem. Und ein Hashwert ist sicherer, weil was passiert, wenn die Systemzeit geändert wird?

Zitat:

Zitat von peschai
Es gäbe auch noch die elegante Möglichkeit, daß dir as Betriebssystem hilft -> Directory notification.

Habe ich auch erst in Erwägung gezogen, allerdings bin ich mir nicht sicher, ob er da auch die geänderte Datei gemeldet bekommt.

peschai 15. Jul 2009 11:07

Re: Test, ob Datei aktualistert ist
 
Anmerkung zu DateiZeit:
Wenn man den Änderungszeitstempel des Betriebssystem nimmt, muss man evt. aufpassen wie schnell die änderungen erfolgen. Liegen diese unterhalb von ms dann sollten man aufpassen...

Sharky 15. Jul 2009 11:17

Re: Test, ob Datei aktualistert ist
 
Ich habe jetzt gerade kein Delphi zur Hand. Aber ich meine bei den Jedis gab es eine Komponente mit der man eine Datei "überwachen" kann.

nahpets 15. Jul 2009 11:19

Re: Test, ob Datei aktualistert ist
 
Hallo,

habe da mal eine Frage:

Ändert sich die letzte Zeile oder wird an das Ende der Datei was drangehangen, so dass sich auch die Zeilenzahl ändert?

Ist die zweite Alternative der Fall:

Dateigröße merken, wenn die sich geändert hat gibt es was neues in der Datei.
Die Änderungen sind ab alter Dateigröße + 1 Byte zu finden.
Damit kann man Logfiles eigentlich recht gut abarbeiten, ohne explizit nach dem letzten Inhalt vor der Änderung zu suchen und dann den "Rest" der Datei auszuwerten. Man hat so auch keinen Informationsverlust, falls man ausversehen mal eine Dateiänderung "verschlafen" hat.
Wenn sich die Dateigröße verkleiner hat, muss man halt die ganze Datei auswerten.

hoika 15. Jul 2009 11:40

Re: Test, ob Datei aktualistert ist
 
Hallo,

Zitat:

Die erstel Zeile ist fest, aber die letzte Zeile ändert sich immer in der gegebenen Datei.
Also merke dir im Programm die jeweils zuletzt geschriebene Zeile
in einer Variable.
Ich würde dann dafür einen Timer verwenden,
wenn es nicht auf die ms ankommt.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz