2012-04-13 12 views
1

BinaryReaderでバイナリーファイルから読み取ろうとしています。バイナリーリーダーは説明をスキップします

  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"); 
       } 
      } 

これは私の読み出し方法である:

    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;  

     } 

は今、これらの線内の何かが働いていない

これは私が私の読書のメソッドを呼び出す方法です。私のファイルは空ではありません。なぜなら、それはファイル内の文字列を読み取ることができる文字列だからです。

私の問題は、私がブレークポイントでいただきました!間違って見つけようとしているされているが、すぐに私はこのラインを乗り越えるよう:

  string loadString = reader.ReadString(); 

私のプログラムが再び実行を開始します。そんなことがあるものか ?これにより、私がString[]の内部にあるものをチェックすることができなくなり、メソッド呼び出しの後の私の値は何かを知ることができなくなります。

理由は何ですか?前もって感謝します。


更新:

私は私のbreakpointここ

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

を移動しようとしましたが、私のプログラムは、それが前のラインを超えて取得することはありません停止することはありません。

はまた、これは私足す方法である:

  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

私のブレークポイントは最初の行にあります(foreach条件) – phadaphunk

+0

(回答に対するコメント)。 'BinaryWriter'を使ってファイルを書いた場合は、その質問をクリアし、' .txt'というファイルを呼び出すべきではないでしょう。 –

+0

ありがとうございました。私はすべての拡張機能を.binに変更し、すべて正常に動作しました。 あなたのコメントを回答として書くことができます。 ありがとう! – phadaphunk

答えて

1

あなたの文字列が長さフィールドの接頭辞を付けることになります。これにより、.txtの拡張機能は誤解を招きます。

「突然もう一度作業を始めました」:テキストエディタでファイルの1つを開いて(保存して)いる可能性はありますか?

また、現在のReadメソッドとWriteメソッドはスレッドセーフではないため、StreamオブジェクトとReader/Writerオブジェクトをusing() {}ステートメントで囲む必要があります。