![]() |
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? |
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? |
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 |
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) |
Re: Test, ob Datei aktualistert ist
Hallo,
Es gäbe auch noch die elegante Möglichkeit, daß dir as Betriebssystem hilft -> Directory notification. |
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:
|
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... |
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.
|
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. |
Re: Test, ob Datei aktualistert ist
Hallo,
Zitat:
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 10:07 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