2016-02-19 47 views
1

我正在阅读一个二进制文件,我想知道一个自定义对象的元素数量,二进制文件包含(这使得搜索EOF的大小无用,因为其全部关于元素的数量)。二进制文件中元素的数量

这是我在做什么现在:

using (var stream = File.OpenRead(openDialog.FileName)) 
using (var reader = new BinaryReader(stream)) 
{ 
    while (CustObject.ReadFromBinaryReader(reader) != null) 
    { 
     objList.Add(CustObject.ReadFromBinaryReader(reader)); 
    } 
} 

出于某种原因,虽然,这是行不通的。我得到的错误:Unable to read beyond end of stream.因此,我想知道二进制文件中有多少元素,并使用该计数将所有对象读入对象列表。

我想用的另一种方法是在写入文件时写入二进制文件时有多少元素。

binaryWriter.Write(string.Format("{0}", objList.Count())); 

不过,我不知道我怎么会读只是这个数字,所以我觉得for环是最佳的选择。

回答

1
while (CustObject.ReadFromBinaryReader(reader) != null) 
{ 
    objList.Add(CustObject.ReadFromBinaryReader(reader)); 
} 

您的问题发生的原因可能是您在阅读条件中的最后一项时,您以后再次阅读。

在文件的开头写入元素数量,比如说整数,然后首先读取该单个字节。检查示例here如何将整数写入文件。然后先读这个整数,然后继续阅读你的对象。

或者如果你确切知道你的对象在文件中占用了多少字节(如果它有固定的大小),用这个数字除文件大小?

+0

从MSDN的写/读出来了:)谢谢! – John

+0

@约翰很好,如果它的工作 –