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();
            }
        }
4

1 に答える 1

1

文字列の前に長さフィールドが付きます。そのため、.txt拡張機能は誤解を招く恐れがあります。

'突然再び動作を開始した'ので:テキストエディタでファイルの1つを開いた(そして保存した)ことは可能ですか?

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

于 2012-04-13T06:19:19.553 に答える