Hallo.
Ich möchte eine .xml-Datei per StreamReader auslesen. Ursprünglich wollte ich das per XmlReader machen, habe aber einen ominösen Fehler dazu bekommen und wollte es dann auf die "schmutzige" Art machen. Das funktioniert soweit auch ganz gut. Nur wenn ich die Zeilen per ReadLine() ausgeben möchte, fehlt das erste Zeichen jeder Zeile.
Hier der Code (haha):
// Erster Durchlauf
while (Reader.Read() != -1)
{
string AktuelleZeile = Reader.ReadLine();
MessageBox.Show(AktuelleZeile);
}
Weiter unten setze ich die Stream per "Reader.BaseStream.Position = 0" wieder auf den Anfang zurück und lese den Stream noch einmal mit einer zweiten Schleife aus. (Ich erwähne das nur der Vollständigkeit halber, weil ich mir nicht erklären kann, wie das durch eine so einfache Code-Stelle passieren kann)
Kann mir jemand sagen, warum das erste Zeichen verloren geht? Wenn die Zeile mit zwei Leerzeichen anfängt, gehen beide verloren.
Jack
edit: Ach ja! Was ich vergessen habe zu erwähnen: Das erste Zeichen ist der Start einem XML-Element, also immer eine offene eckige Klammer ("<") oder eben ein Leerzeichen.
-> Informatik-Infotainment <-
Hallo Jack_AI,
StreamReader.Read
Liest das nächste Zeichen aus dem Eingabestream und verschiebt die Zeichenposition um ein Zeichen nach vorn.
herbivore
Autsch, das war mal wieder peinlich. Jetzt hat herbivore wieder für mich Suchmaschine spielen müssen. Sorry dafür. Leider weiß ich nicht, wie ich an dieses übersprungene Zeichen kommen kann.
Domo arigato,
Jack
-> Informatik-Infotainment <-
Hallo Jack_AI,
du solltest es gar nicht erst auslesen. Soll ich wieder Suchmaschine spielen oder findest du die Methode mit der man, ohne ein Zeichen zu lesen, herausbekommt, ob noch Zeichen vorhanden sind, auch ohne mich? 🙂
herbivore
Haha, nein, nein. Ich such' schon, ich such' schon. Wenn ich das Problem gelöst habe, poste ich hier noch mal meine Lösung, für die nächste Generation an Anfängern. Danke nochmals,
Jack
-> Informatik-Infotainment <-
Ach klasse. Hab's schon:
while ((AktuelleZeile = Reader.ReadLine()) != null)
{
MessageBox.Show(AktuelleZeile);
}
Manchmal sieht man die Lösung vor lauter Vakuum nicht.
Jack
-> Informatik-Infotainment <-