2011-03-19 112 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