Что может быть возможным решением для определения сложного двоичного файла для чтения и записи в него из C #.В настоящее время я получаю доступ к полям двоичного файла через фиксированные / жестко заданные смещения, но мне бы хотелось иметь более чистое решение.Я посмотрел в Kaitai, и он выглядит идеально, за исключением того, что я не могу использовать его для записи данных.
Существует ли подобное решение / framework / библиотека для определения и использования двоичных файлов?
Так как яу меня уже есть существующий формат, который я использую, я не могу заменить его, т.е. полностью на ProtoBuf или аналогичный.
Редактировать: одна проблема состоит в том, что файлы имеют размер от 100 МБ до нескольких ГБ, поэтому мне нужна функция потоковой передачи и я не могу проанализироватьвсе сразу.
Edit2: Другими словами, мне нужно более чистое решение для чего-л, как это (где структуры, подобные FileHeader
, также определяются с помощью MarshalAs
и 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