2012-04-13 20 views
1

Ich versuche, aus einer Binärdatei mit BinaryReader zu lesen. DieseBinärer Leser überspringt Anweisungen

ist, wie ich meine Lesemethode nennen:

  foreach (Movie film in TreeBuilder.myMovies) 
     { 
      if (File.Exists(@"C:\Users\DaPhunk\Documents\Visual Studio 2010\Projects\YLK\Binary\" + film.MovieName + ".txt")) 
      { 
       string[] myArray = operationManager.BinaryReading(film.MovieName); 
       if (myArray != null) 
       { 
        this.textStarring.Text = myArray[1]; 
        this.textProduced.Text = myArray[2]; 
        this.textMusic.Text = myArray[3]; 
        this.textYear.Text = myArray[4]; 
        this.textTime.Text = myArray[5]; 
       } 
       else 
       { 
        MessageBox.Show("An error occured"); 
       } 
      } 

Das ist meine Lesemethode:

    public string[] BinaryReading(string name) 
     { 

      FileStream myStream = new FileStream(@"C:\Users\DaPhunk\Documents\Visual Studio 2010\Projects\YLK\Binary\" + name + ".txt", FileMode.Open); 
      BinaryReader reader = new BinaryReader(myStream); 

      string loadString = reader.ReadString(); 
      string[] loadArray = loadString.Split(','); 

      reader.Close(); 
      myStream.Close(); 

      return loadArray;  

     } 

Jetzt etwas in diese Richtung nicht funktioniert. Meine Datei ist nicht leer, da es nur eine Zeichenfolge ist, kann ich lesen, was in der Datei ist.

Mein Problem ist, ich versuche, was ist falsch mit einer Bruchstelle zu finden, aber sobald ich an dieser Linie erhalten:

  string loadString = reader.ReadString(); 

Mein Programm beginnt wieder zu laufen. Wie ist das möglich ? Das hindert mich daran, zu überprüfen, was in meinem String[] ist und was meine Werte nach dem Methodenaufruf sind.

Irgendeine Idee warum? Danke im Voraus.


Update:

Ich versuchte, meine breakpoint hier

    string[] loadArray = loadString.Split(','); 

Aber mein Programm zu bewegen, hört nie auf, so wird es nie vorbei an der vorherigen Zeile.

Auch dies ist mein Writting Methode:

  foreach (Movie film in TreeBuilder.myMovies) 
     { 
      if (film.MovieName == name) 
      { 
       FileStream myStream = new FileStream(@"C:\Users\DaPhunk\Documents\Visual Studio 2010\Projects\YLK\Binary\" + film.MovieName + ".txt", FileMode.Create); 
       BinaryWriter writer = new BinaryWriter(myStream); 

       writer.Write(film.MovieName + "," + starring + "," + produced + "," + music + "," + year + "," + lenght); 
       writer.Close(); 
       myStream.Close(); 
      } 
     } 
+0

Mein Haltepunkt ist in der ersten Zeile (foreach Zustand) – phadaphunk

+0

(re Kommentare zu einer Antwort); Wenn Sie die Datei mit 'BinaryWriter' geschrieben haben, sollten Sie dies in der Frage klarstellen, und Sie sollten die Datei' .txt' wahrscheinlich nicht aufrufen. –

+0

Danke, das war das Problem. Ich habe alle meine Erweiterungen für .bin geändert und alles hat gut funktioniert. Schreiben Sie einfach Ihren Kommentar als Antwort, damit ich ihn als akzeptiert markieren kann. Vielen Dank! – phadaphunk

Antwort

1

Ihre Zeichenfolge wird mit einem Längenfeld vorangestellt werden. Das macht die .txt Erweiterung irreführend.

Da es plötzlich wieder funktioniert ': ist es möglich, dass Sie eine der Dateien mit einem Texteditor öffnen (und speichern)?

Auch Ihre aktuellen Lese- und Schreibmethoden sind nicht Thread-sicher, Sie sollten die Stream- und Reader/Writer-Objekte in using() {}-Anweisungen einschließen.