定义一个复杂的二进制文件以从 C# 读取和写入它的可能解决方案是什么。目前我通过固定/硬编码的偏移量访问二进制字段,但我希望有一个更清洁的解决方案。我看了开泰,它看起来很完美,只是我不能用它来写数据。
是否有类似的解决方案/框架/库来定义和使用二进制文件?
由于我已经有一个正在使用的现有格式,我无法将 ie 完全交换为 ProtoBuf 或类似格式。
编辑:一个问题是,文件从 100MB 到几 GB 大,所以我需要流功能并且不能一次全部解析。
Edit2:换句话说,我需要一个更清洁的解决方案来解决这样的问题(其中的结构FileHeader
也可以在MarshalAs
and的帮助下定义FieldOffsets
:
[FieldOffset(0)]
[MarshalAs(UnmanagedType.Struct, SizeConst = HeaderSegmentSize)]
public FileHeader HeaderSegment; //256byte
[FieldOffset(256)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = RunningDataSegmentSize)]
public byte[] RunningDataSegment; // 9MB
[FieldOffset((1024 * 1024 * 9) + 256)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MeasurementLabelSegmentSize)]
public MeasurementLabel[] MeasurementLabelSegment; //1MB
[FieldOffset((1024 * 1024 * 1) + (1024 * 1024 * 9) + 256)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = DescriptionSegmentSize)]
public byte[] DescriptionSegment; //1MB
[FieldOffset((1024 * 1024 * 1) + (1024 * 1024 * 1) + (1024 * 1024 * 9) + 256)]
public FileData[] DataSegment; //openEnd