C# 二进制文件中的元素数

C# 二进制文件中的元素数,c#,file,io,binaryreader,binarywriter,C#,File,Io,Binaryreader,Binarywriter,我正在读一个二进制文件,我想知道一个自定义对象的元素数,二进制文件包含的元素数(这使得搜索带有大小的EOF毫无用处,因为它只涉及元素数) 这就是我现在正在做的: using (var stream = File.OpenRead(openDialog.FileName)) using (var reader = new BinaryReader(stream)) { while (CustObject.ReadFromBinaryReader(reader) != null) {

我正在读一个二进制文件,我想知道一个自定义对象的元素数,二进制文件包含的元素数(这使得搜索带有大小的EOF毫无用处,因为它只涉及元素数)

这就是我现在正在做的:

using (var stream = File.OpenRead(openDialog.FileName))
using (var reader = new BinaryReader(stream))
{
    while (CustObject.ReadFromBinaryReader(reader) != null)
    {
        objList.Add(CustObject.ReadFromBinaryReader(reader));
    } 
}
但出于某种原因,这不起作用。我得到一个错误:
无法读取流末尾以外的内容。
因此,我想找出二进制文件中有多少元素,并使用该计数将所有对象读入对象列表

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

binaryWriter.Write(string.Format("{0}", objList.Count()));
但是,我不知道如何读取这个数字,所以我认为
for
循环是最好的选择

while (CustObject.ReadFromBinaryReader(reader) != null)
{
    objList.Add(CustObject.ReadFromBinaryReader(reader));
} 
出现问题的原因可能是,当您在while条件中读取最后一项时,之后会再次读取

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

或者,如果您确切地知道对象在文件中占用了多少字节(如果文件大小固定),请将文件大小除以这个数字