C# geöffnete Datei zum Lesen öffnen wirft exception

df8oe

Cadet 2nd Year
Registriert
Dez. 2013
Beiträge
22
Hallo an alle,

ich habe folgende Problemstellung:

Eine Anwendung schreibt zeilenweise Infos in eine Logdatei. Ich möchte die Infos während des Laufs der Anwendung auswerten.

Öffne ich die Logdatei mit dem Notepad oder dem Wordpad, funktioniert das und ich kann den jeweisl beim Öffnen herrschenden Stand sehen.

Nun möchte ich die Datei in meinem C# - Programm öffnen und die letzte Zeile einlesen. Es soll auch wirklich nur die letzte Zeile sein, da ich nicht den Inhalt der gesamten Datei jeweils einlesen will. Interessieren tut nur die letzte Zeile...

Dies habe ich versucht mit:

string lastline = File.ReadLines(@"C:\pfad-zur-datei-und-dateiname").Last();

Mache ich das, während die Anwendung, die die Logdatei schreibt, NICHT läuft, funktioniert es so, wie ich es möchte. Läuft die Anwendung jedoch noch (und das ist der gewünschte Betriebsfall!!), dann entsteht an der Stelle eine Exception, weil "eine andere Anwendung auf die Datei zugreift". Ärger: ich will ja nicht drauf schreiben, ich will nur die letzte Zeile lesen... Das muss gehen, denn Notepad und Wordpad können es auch, nur File.Readlines scheint nicht die richtige Funktion zu sein...

Bin für Tipps dankbar ;)

Gruß
df8oe
 
temporäre Kopie anlegen auslesen löschen wäre da mein vorgehen
 
...und das jede Sekunde?? Es handelt sich um eine Messwerterfassung, die über Stunden, Tage oder gar Wochen laufen soll. Die arme Platte ;)

Ich kann nicht glauben, dass das nicht einfacher geht...

df8oe
 
Kannst du denn sicher gehen, dass zwischen den Lesepunkten immer nur eine Zeile geschriebe wurde?
Der Thread bei stackoverflow scheint mir dein Problem zu lösen:
http://stackoverflow.com/questions/3448230/how-can-i-read-a-text-file-without-locking-it

Tenor: FileStreams nutzen und exclusiv schreib- oder leserechte mitgeben...

Aber generell:
Warum die Zeile erst raus schreiben und dann wieder rein lesen? Direkt (parallel zum log-Vorgang) in eine Queue übergeben aus der ausgewertet wird dürfte doch wesentlich schneller sein...
 
Danke - damit kann ich mir was zurechtbasteln...

Gruß
df8oe
 
Zurück
Oben