二进制文件中的元素数

Number of Elements in a Binary File

我正在读取一个二进制文件,我想知道自定义对象的元素数量,该二进制文件包含(这使得搜索大小为 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 循环是最好的选择。

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

您的问题发生是因为当您在 while 条件下阅读最后一项时,您随后又阅读了一遍。

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

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