AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tail Funktionalität

Ein Thema von gsh · begonnen am 22. Sep 2009 · letzter Beitrag vom 23. Sep 2009
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Tail Funktionalität

  Alt 22. Sep 2009, 14:22
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.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Tail Funktionalität

  Alt 22. Sep 2009, 14:28
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Tail Funktionalität

  Alt 22. Sep 2009, 14:32
.. hier ein ähnlicher Ansatz:

Zitat:
AndersonCarli:
You may save last file size and then read from that pos.
Try this: (not compiled)
Delphi-Quellcode:
function Tail(FileName:string; Position:Integer):string;
var
  S: TStream;
  C: Char;
  L: Integer;
begin
  S := TFileStream.Create(FileName, fmOpenRead ,fmShareDenyNone);
  try
    S.Seek(Position, soBeginning);
    L := S.Size-Position;
    SetLength(Result, L);
    S.Read(Result[1], L);
  finally
    S.Free;
  end;
end;
Quelle

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Tail Funktionalität

  Alt 22. Sep 2009, 14:32
Sollte mt Hilfe eines FileStreams funktionieren.

Btw. Tail zeigt den Schluss ( letzte n-Zeilen an)
Markus Kinzler
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: Tail Funktionalität

  Alt 22. Sep 2009, 14:34
Hi,

Stichwort: FindFirstChangeNotification, z.B. implementiert in ATFileNotification (Komponente).

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#6

Re: Tail Funktionalität

  Alt 22. Sep 2009, 14:50
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 ). Die Methode sollte dann sogar über ftp funktionieren .

Zitat von Assertor:
Stichwort: FindFirstChangeNotification, z.B. implementiert in ATFileNotification (Komponente).
Ist wahrscheinlich die Ressourcen schonenste Variante aber es geht wahrscheinlich nicht über eine Windows Freigabe (und ganz sicher nicht über ftp) oder? (Hab vergessen zu schreiben das das auch wichtig ist.)
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#7

Re: Tail Funktionalität

  Alt 22. Sep 2009, 15:01
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?
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

Re: Tail Funktionalität

  Alt 22. Sep 2009, 15:46
Es gibt hier schon ein paar Threads zu diesem Thema "Auf Dateien zugreifen, welche geöffnet sind"
z.B. http://www.delphipraxis.net/internal...t.php?t=141044

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
(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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#9

Re: Tail Funktionalität

  Alt 22. Sep 2009, 17:33
Du könntest einfach die Datei temporär kopieren, dann sollte das doch eigentlich klappen, oder?
müsstest du beim FTP ja sowieso, oder?
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#10

Re: Tail Funktionalität

  Alt 22. Sep 2009, 18:16
Zitat von himitsu:
Es gibt hier schon ein paar Threads zu diesem Thema "Auf Dateien zugreifen, welche geöffnet sind"
z.B. http://www.delphipraxis.net/internal...t.php?t=141044
Bringt mir nichts da es ganz wichtig ist das z.b. so eine datei: \\entfernterpc\freigabe\datei.log auch geöffnet werden kann. Da der Service der auf die Datei zugreift somit nicht auf dem gleichen System ist ...

Zitat von himitsu:
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
(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.
Der Service greift immer als erstes und andauerend auf die Datei zu. Somit geht diese Lösung leider auch nicht.

Zitat von himitsu:
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
ich dachte Filesystem Zugriffe werden durch Windows Threadsafe gemacht.

Zitat von Morphie:
Du könntest einfach die Datei temporär kopieren, dann sollte das doch eigentlich klappen, oder?
müsstest du beim FTP ja sowieso, oder?
Davon abgesehen das ich auch nicht auf die Datei zugreifen kann um sie kopieren zu können, ist dies bei teilweiße großen Logs über das Netzwerk eine sehr schlechte Lösung.

Das mit dem FTP ist sehr optional und war nur mal eine kleine Idee von mir. Also kann dies erstmal nach hinten gestellt werden.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.
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