【问题标题】:Number of Elements in a Binary File二进制文件中的元素数
【发布时间】:2016-02-19 17:51:20
【问题描述】:

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

【问题讨论】:

    标签: c# file io binaryreader binarywriter


    【解决方案1】:
    while (CustObject.ReadFromBinaryReader(reader) != null)
    {
        objList.Add(CustObject.ReadFromBinaryReader(reader));
    } 
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 2017-01-26
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多