![]() |
Tail Funktionalität
Hallo Leute,
Es kennen doch von euch sicher viele die Programme "Tail for Win32", "WinTail" oder unter Linux "tail". Genau diese Funktionalität will ich in meinem Programm auch implementieren. Falls jemand die Programme nicht kennt: Diese Programme öffnen eine Datei und zeigen automatisch neue Zeilen an die nach dem Öffnen in die Datei geschrieben wurde. Am besten vorstellbar bei Log Dateien: Wenn eine neue Zeile vom Programm geloggt wird dann kann man diese sofort sehen und muss nicht die Log-Datei neu öffnen. Meine Frage ist jetzt wie ich so etwas am besten realiesieren könnte. Jedesmal mit LoadFromFile die Datei neu laden und dann auf Änderungen überprüfen ist glaub ich keine gute Lösung. |
Re: Tail Funktionalität
Du könntest in regelmäßigen Abständen die Werte der Dateigröße und 'Zuletzt geändert am' auf Änderung prüfen.
Erst wenn sich diese Werte verändert haben wird die Datei neu geladen und auf den Inhalt geprüft. Es gab aber auch mal eine Komponente namens "FileWatcher", ich glaub hier aus der DP. Evtl. könnte man da mal nachschauen, wie die die Änderungen feststellt. |
Re: Tail Funktionalität
.. hier ein ähnlicher Ansatz:
Zitat:
![]() Grüße Klaus |
Re: Tail Funktionalität
Sollte mt Hilfe eines FileStreams funktionieren.
Btw. Tail zeigt den Schluss ( letzte n-Zeilen an) |
Re: Tail Funktionalität
Hi,
Stichwort: FindFirstChangeNotification, z.B. implementiert in ATFileNotification (Komponente). Gruß Assertor |
Re: Tail Funktionalität
Also ich fass es mal kurz zusammen:
* Sagen wir mal jede Sekunde die Dateigröße überprüfen. * Wenn die Dateigröße kleiner geworden ist (sollte eigentlich nicht vorkommen) -> Datei komplett neu einlesen * Wenn die Dateigröße größer geworden ist dann über den Filestream die letzten Änderungen einlesen (Post #3) Dies klingt für mich mal ganz gut (Hätte ich eigentlich auch selbst drauf kommen können :oops: ). Die Methode sollte dann sogar über ftp funktionieren :mrgreen: . Zitat:
|
Re: Tail Funktionalität
So hab das jetzt kurz probiert und bin gleich mal auf ein Problem gestoßen:
Im Projekt Project1.exe ist eine Exception der Klasse EFOpenError mit der Meldung 'Datei C:\Testlogdatei.log kann nicht geöffnet werden. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird' aufgetreten. Die Log-Datei wird vom Server exklusiv exklusiv geöffnet (kann ich nicht ändern). Deswegen kann mein Programm darauf nicht zugreifen. Der Witz ist aber das z.b. WinTail es schafft die Datei trotzdem auszulesen. Wie macht WinTail das? |
Re: Tail Funktionalität
Es gibt hier schon ein paar Threads zu diesem Thema "Auf Dateien zugreifen, welche geöffnet sind"
z.B. ![]() In irgendeinem hatte ich mal eine Demo gepostet, welche sobald sie erstmal Zugriff auf die Datei (vie Filehandle und mit den geltenden Zugriffs- und Sharingrechten erhalten hat, diesen immer behält und danach andere Programm normal drauf zugreifen können, da dann an den Sharingrechten vorbeigelesen wird :stupid: (ich finde nur den schon ein paar Jahre alten Thread nimmer, aber da ging's darum zu erkennen ob eine Datei vor irgendeinem Programm geöffnet ist), aber wenn ich mich nicht irre, dann würde dieser Weg dir wohl nicht viel helfen, da (glaube ich zumindestens grade) die nur der Bereich zugreifbar ist, welcher schon existierte und nichts aus Dateivergrößerungen ... müßte ich irgendwann mal schauen, ob ich das so richtig in erinnerung hab. PS: Die Zugriffsprobleme, welche du beim Lesen hast, hat das andere Programm auch, also wenn du grad dabei bist die Datei auszulesen und das andere Programm da grad was reinschreiben will ... *peng* und, wenn du Pech hast, das andere Programm macht sonstwas :stupid: |
Re: Tail Funktionalität
Du könntest einfach die Datei temporär kopieren, dann sollte das doch eigentlich klappen, oder?
müsstest du beim FTP ja sowieso, oder? |
Re: Tail Funktionalität
Zitat:
Zitat:
Zitat:
Zitat:
Das mit dem FTP ist sehr optional und war nur mal eine kleine Idee von mir. Also kann dies erstmal nach hinten gestellt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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