首页 > 解决方案 > .Net 中复杂和大型二进制文件的声明性语言

问题描述

定义一个复杂的二进制文件以从 C# 读取和写入它的可能解决方案是什么。目前我通过固定/硬编码的偏移量访问二进制字段,但我希望有一个更清洁的解决方案。我看了开泰,它看起来很完美,只是我不能用它来写数据。

是否有类似的解决方案/框架/库来定义和使用二进制文件?

由于我已经有一个正在使用的现有格式,我无法将 ie 完全交换为 ProtoBuf 或类似格式。

编辑:一个问题是,文件从 100MB 到几 GB 大,所以我需要流功能并且不能一次全部解析。

Edit2:换句话说,我需要一个更清洁的解决方案来解决这样的问题(其中的结构FileHeader也可以在MarshalAsand的帮助下定义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

标签: c#.netbinarydslkaitai-struct

解决方案


推荐阅读