二进制文件中的元素数
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 如何将整数写入文件。然后先读回这个整数,然后继续读取你的对象。
或者,如果您确切知道对象在文件中占用了多少字节(如果它具有固定大小),请将文件大小除以这个数字?
我正在读取一个二进制文件,我想知道自定义对象的元素数量,该二进制文件包含(这使得搜索大小为 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 如何将整数写入文件。然后先读回这个整数,然后继续读取你的对象。
或者,如果您确切知道对象在文件中占用了多少字节(如果它具有固定大小),请将文件大小除以这个数字?