[C#] WriteLine setzt eof vor die letzte Datenzeile

S_Drum

Mitglied
Hallo,

als Umsteiger von PHP auf C# stoss ich grad an meine (Wissens)grenzen.

Ich möchte einen String in einer .txt speichern. Nun hab ich gelernt, das man das mit einem StreamWriter und der Methode WriteLine machen kann. WriteLine schreibt eine Datenzeile in eine Datei mit einem Zeilenumbruch am Ende. Soweit sogut.

Quelltext:

FileStream fs1 = File.Open(datei, FileMode.Append, FileAccess.Write, FileShare.None);
using (StreamWriter zeile = new StreamWriter(fs1))
{
zeile.WriteLine(personalnummer+";"+neuer_eintrag);
}
fs1.Close();

datei ist die Pfadvariable, personalnummer leg ich woanders fest(was auch funktioniert), neuer_eintrag ist ein String, der an anderer Stelle festgelegt wird.

Die Zeile wird auch korrekt in die Datei geschrieben.

Danach will ich überprüfen, ob die Zeile geschrieben wurde, in dem ich die datenzeilen zähle (nach dem Schreiben der Zeile sollte ja nun eine Zeile mehr als vorher vorhanden sein)

Quelltext:

FileStream fs2 = File.Open(datei, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
using (StreamReader zeile = new StreamReader(fs2))
{
counter_nach_speicherung = 0;
string datenzeile = zeile.ReadLine();
while (zeile.Peek() != -1)
{
counter_nach_speicherung++;
zeile.ReadLine();
}
}
fs2.Close();

Und genau hier liegt das Problem. fs2 erkennt immer die zuletztgeschriebene Zeile nicht, weil eof wohl vor dieser ist.

Kann mir jemand weiterhelfen? Danke im Voraus.

Gruß Silvio
 
Hab ne Lösung gefunden.

Die Abbruchbedingung der while-Schleife war drann Schuld.

Die Methode Peek() hat beim Einlesen der letzten Zeile eine -1 zurückgeliefert. Dadurch war die Abbruchbedingung erfüllt und die letzte Zeile wurde nicht mehr verarbeitet.

Ich hab die while geändert in:

while(datenzeile != null)

Und jetzt funktioniert es.


Ich weiss, dass dies keine optimale Lösung ist, da nun das Einlesen beendet wird, sobald in der Datei eine Leerzeile vorkommt. Aber fürs erste hilft es mir mal weiter.


Gruß Silvio
 
Zurück