二进制文件中的元素数

本文关键字:元素 二进制文件 | 更新日期: 2023-09-27 18:35:33

我正在读取二进制文件,我想知道二进制文件包含的自定义对象的元素数量(这使得搜索大小的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 条件下读取最后一项时,您之后会再次阅读。

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

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