2012-04-13 67 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 2012-04-13 05:33:34

+0

(上一个答案再评论);如果你用'BinaryWriter'编写了文件,你应该在问题中说清楚,你可能不应该调用'.txt'文件。 – 2012-04-13 05:45:11

+0

谢谢你是这个问题。我更改了所有的.bin扩展名,并且一切正常。 只需将您的评论写为答案,以便我可以将其标记为已接受。 非常感谢! – phadaphunk 2012-04-13 05:48:00

回答

1

你的字符串将长度字段作为前缀。这使得.txt扩展名具有误导性。

因为它是突然间又开始工作“:是否有可能你打开和被保存在文本编辑器中的一个文件?

而且,当前的读取和写入方法不是线程安全的,你应该附上流和读/写对象using() {}语句。