【发布时间】:2016-01-08 12:53:39
【问题描述】:
我正在使用二进制文件来存储某些产品的测量数据。以前产品是唯一的一种类型,现在我必须能够保存/加载更多类型的产品。
我打算在文件的开头保存一些类型描述符,1 Byte 应该是绝对够用的,只会有几种类型(2,将来可能是 3 或 4)。
问题是,我仍然需要能够在没有此描述符的情况下加载旧的二进制文件。这是我的带有注释的旧代码,我想在其中检查描述符的存在,然后做出关于产品类型的决定,如下所示:
- 没有描述符 -> 旧产品
- 描述符 = xxx -> 新产品 xxx
是否可以以这种格式保存描述符?我想调用reader.PeekChar() 只是一种可能性,因为没有移动到下一个字节,但我不确定在这种情况下如何使用它。
BinaryReader reader;
using (reader = new BinaryReader(File.Open(header.path, FileMode.Open, FileAccess.Read)))
{
// ...
// check presence of product type descriptor
// make a decision of type
// ...
DateTime measTime = DateTime.FromOADate(reader.ReadDouble());
double diameter = reader.ReadDouble();
double plusToler = reader.ReadDouble();
double minusToler = reader.ReadDouble();
}
【问题讨论】:
-
您的源流是一个普通文件,因此是可搜索的,对吧?如果是这样,(暂时)“移动到下一个字节”有什么问题?
-
哦,你是对的。我没有想到临时寻求。
-
我会在旧产品上使用虚拟描述符,并在检测到虚拟值时将其丢弃。这比在文件中来回遍历要高效得多。两种方法都可以
-
@nicomp:但问题是,我还需要能够加载没有描述符的旧文件。求解决了这个问题。效率没那么损失,我肯定用了4个字节,所以我读了4个字节然后往回找,就这样。
标签: c# binaryfiles descriptor binaryreader