Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] StreamReader verschluckt erstes Zeichen
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

[erledigt] StreamReader verschluckt erstes Zeichen

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Jack_AI am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Jack_AI,
Zitat
StreamReader.Read
Liest das nächste Zeichen aus dem Eingabestream und verschiebt die Zeichenposition um ein Zeichen nach vorn.
herbivore
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Ach klasse. Hab's schon:


  while ((AktuelleZeile = Reader.ReadLine()) != null)
  {
    MessageBox.Show(AktuelleZeile);
  }

Manchmal sieht man die Lösung vor lauter Vakuum nicht.

Jack
private Nachricht | Beiträge des Benutzers