Forum: PC-Programmierung Nur letzte Zeile von Textdatei lesen (C#)


von Neuling (Gast)


Lesenswert?

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.

von neuling (Gast)


Lesenswert?

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
}

von STK500-Besitzer (Gast)


Lesenswert?

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?

von Dominik S. (dasd)


Lesenswert?

> 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();

von neuling (Gast)


Lesenswert?

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?

von Kaspar Hauser (Gast)


Lesenswert?

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?

von Kaspar Hauser (Gast)


Lesenswert?

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 
...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von neuling (Gast)


Lesenswert?

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!

von Peter II (Gast)


Lesenswert?

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.

von Grottenknilch (Gast)


Lesenswert?

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 ...

von Dominik S. (dasd)


Lesenswert?

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
Noch kein Account? Hier anmelden.