Guten Morgen, ich möchte von einer Textdatei nur die letzte Zeile in eine string Variable auslesen können. Wie könnte dies mit StreamReader realisiert werden? Besten Dank schonmal im Voraus.
In einer while Schleife zähle ich einen Counter hoch bis die letzte Zeile erreicht wird. Gibt es noch einen anderen Weg?
1 | FileStream fs = new FileStream(datei, FileMode.Open, FileAccess.Read, FileShare.Write); |
2 | using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default)) |
3 | {
|
4 | while (sr.ReadLine() != null) |
5 | {
|
6 | Counter = Counter + 1; |
7 | }
|
8 | Counter = Counter - 1; |
9 | }
|
Einfach jede Zeile in die Variable einlesen. Der letzte Eintrag ist dann die letzte Zeile. neuling schrieb: > In einer while Schleife zähle ich einen Counter hoch bis die letzte > Zeile erreicht wird. Gibt es noch einen anderen Weg? Wozu? Willst du die Anzahl der Zeilen wissen?
> Gibt es noch einen anderen Weg?
Wie immer gibt es unzählige Wege... z.B.
1 | string lastLine = System.IO.File.ReadLines("test.txt").Last(); |
In der Textdatei habe ich eine fortlaufende Nummer. Wenn ich die Applikation neu starte, soll das Speichern ab der letzten Nummer von der Textdatei erfolgen. Was ich eigentlich möchte ist, dass ich NUR die letzte Zeile von der Textdatei auslesen möchte. Wie könnte dies umgesetzt werden?
Oder vom Ende der Datei ein Stück lesen und dann den String oder das Array von hinten nach Newlines durchsuchen. Ich gehe jetzt mal von 1 Byte pro Zeichen in der Datei aus, weil du zum Format nichts schreibst. BTW: Suchst du nun - wie oben angegeben - die letzte Zeile oder den Index der letzten Zeile bzw. die Anzahl der Zeilen?
Kaspar Hauser schrieb: > Ich gehe jetzt mal von 1 Byte pro Zeichen in der Datei aus Genauer gesagt: von einer konstanten Anzahl von Bytes pro Zeichen. Sonst wird es mit "das Ende einlesen und von hinten auswerten" u.U. schwierig ...
neuling schrieb: > Was ich eigentlich möchte ist, dass ich NUR die letzte Zeile von der > Textdatei auslesen möchte. Wie könnte dies umgesetzt werden? Du könntest die Datei zeichenweise rückwärts (d.h. vom Dateiende ausgehend) einlesen bis Du zum ersten Zeilenumbruchszeichen kommst.
Damit funktioniert es so wie ich es möchte:
1 | string lastLine = System.IO.File.ReadLines("test.txt").Last(); |
Vielen Dank für die Unterstützung!
neuling schrieb: > Damit funktioniert es so wie ich es möchte: > string lastLine = System.IO.File.ReadLines("test.txt").Last(); naja, hoffentlich wird die Daten nicht mehr sehr groß. Hier wird alles in den RAM geladen was in der Datei steht.
neuling schrieb: > Damit funktioniert es so wie ich es möchte: > string lastLine = System.IO.File.ReadLines("test.txt").Last(); Neuling schrieb: > Wie könnte dies mit StreamReader realisiert werden Hmpf ...
neuling schrieb: > Damit funktioniert es so wie ich es möchte: Ok. Es sei allerdings dazu gesagt, dass die Lösung zwar diese Anforderung erfüllt: Neuling schrieb: > ich möchte von einer Textdatei nur die letzte Zeile in eine string > Variable auslesen können. Folgende (von dir erst später erwähnte :) ) jedoch nicht: neuling schrieb: > Was ich eigentlich möchte ist, dass ich NUR die > letzte Zeile von der Textdatei auslesen möchte. Die letzte Zeile landet zwar in der Variablen, im Hintergrund wird aber dennoch alles eingelesen.
1 | System.IO.File.ReadLines("test.txt") |
liefert ein String-Array mit allen Zeilen zurück, das angehängte ".Last()" gibt dir dann nur dessen letztes Element.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.