2011-03-19 215 views
0

使用BinaryReader將二進制文件的元素放入Int16列表中。 但是從二進制文件讀回的元素的計數值不正確。 這裏是讀者:BinaryReader缺失值

  using (var file = File.OpenRead(openFileName)) 
      using (var reader = new BinaryReader(file)) 
      { 
       int count = reader.ReadInt16(); 
        this.view.Data = new List<Int16>(count); 
       for (int i = 0; i < count; i++) 
        this.view.Data.Add(reader.ReadInt16()); 
      } 

我知道,當IM節省了view.Data列表constains 19000元我的二進制文件,但後來我上面它告訴我,所示的讀法期間看的計數值數只有134 :(

這裏是writter:

    using (var file = File.Create(fileName)) 
        using (view.Writer = new BinaryWriter(file)) 
        { 
         foreach (Int16 dataItem in view.Data) 
         { 
          view.Writer.Write(dataItem); 
         } 
        } 

文件總大小後寫爲40KB,而當在調試模式下view.Data包含讀取時19000 savign時,只有134?

任何人都可以請幫助

+0

什麼是您正在閱讀的文件的文件大小? – BrokenGlass 2011-03-19 18:09:50

+0

顯然,讀寫代碼之間存在不匹配。或者編寫代碼不在文件的開始處開始。如果沒有幫助,請發佈編寫代碼。您可以使用十六進制查看器來獲得關於文件內容的第二種意見。 – 2011-03-19 18:10:54

+0

@Hans - 這就是爲什麼我要求的文件大小 - 它應該是38002個字節,如果它確實包含一個計數和19000個Int16值。 – BrokenGlass 2011-03-19 18:17:17

回答

1

你是不是寫出來的數量,它應該是這樣的,以配合您的閱讀代碼:

   using (var file = File.Create(fileName)) 
       using (view.Writer = new BinaryWriter(file)) 
       { 
        Int16 count = (Int16) view.Data.Count; 
        view.Writer.Write(count); 
        foreach (Int16 dataItem in view.Data) 
        { 
         view.Writer.Write(dataItem); 
        } 
       } 

可能是第一個值view.Data[0]134值,這就是爲什麼你目前是隻讀這麼多。

+0

不完全。這可能是重現OP問題的好方法。如果沒有強制轉換,Count值可能會寫爲Int32。 – 2011-03-19 18:23:00

+0

你是對的第一個值是134,那麼我該如何克服這個問題? – leroyJenkins 2011-03-19 18:24:41

+0

你是一個傳奇!這工作完美:)非常感謝你! ; D – leroyJenkins 2011-03-19 18:27:31