Найдено результатов: 2

Чтение двоичного файла в структуру

Я пытаюсь читать двоичные данные с помощью C#. у меня есть вся информация о расположении данных в файлах, которые я хочу прочитать. Я могу читать данные "кусок за куском", т. е. получать первые 40 байт данных, преобразовывая их в строку, получать следующие 40 байт.

Поскольку существует по крайней мере три слегка отличающихся версии данных, я хотел бы прочитать данные непосредственно в структуру. Это просто кажется гораздо более правильным, чем при чтении его "line by line".

Я попробовал следующий подход, но безрезультатно:

StructType aStruct;
int count = Marshal.SizeOf(typeof(StructType));
byte[] readBuffer = new byte[count];
BinaryReader reader = new BinaryReader(stream);
readBuffer = reader.ReadBytes(count);
GCHandle handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
aStruct = (StructType) Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(StructType));
handle.Free();

Поток-это открытый FileStream, из которого я начал читать. Я получаю AccessViolationExceptio n при использовании Marshal.PtrToStructure .

Поток содержит больше информации, чем я пытаюсь прочитать, так как меня не интересуют данные в конце файла.

Структура определяется следующим образом:

[StructLayout(LayoutKind.Explicit)]
struct StructType
{
    [FieldOffset(0)]
    public string FileDate;
    [FieldOffset(8)]
    public string FileTime;
    [FieldOffset(16)]
    public int Id1;
    [FieldOffset(20)]
    public string Id2;
}

Код примеров изменен с оригинала, чтобы сделать этот вопрос короче.

Как бы я мог читать двоичные данные из файла в структуру?

c#   struct   io   binaryfiles    

457   7   16:03, 1st July, 2020


Чтение двоичного файла в структуру

Я пытаюсь читать двоичные данные с помощью C#. у меня есть вся информация о расположении данных в файлах, которые я хочу прочитать. Я могу читать данные "кусок за куском", т. е. получать первые 40 байт данных, преобразовывая их в строку, получать следующие 40 байт.

Поскольку существует по крайней мере три слегка отличающихся версии данных, я хотел бы прочитать данные непосредственно в структуру. Это просто кажется гораздо более правильным, чем при чтении его "line by line".

Я попробовал следующий подход, но безрезультатно:

StructType aStruct;
int count = Marshal.SizeOf(typeof(StructType));
byte[] readBuffer = new byte[count];
BinaryReader reader = new BinaryReader(stream);
readBuffer = reader.ReadBytes(count);
GCHandle handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
aStruct = (StructType) Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(StructType));
handle.Free();

Поток-это открытый FileStream, из которого я начал читать. Я получаю AccessViolationExceptio n при использовании Marshal.PtrToStructure .

Поток содержит больше информации, чем я пытаюсь прочитать, так как меня не интересуют данные в конце файла.

Структура определяется следующим образом:

[StructLayout(LayoutKind.Explicit)]
struct StructType
{
    [FieldOffset(0)]
    public string FileDate;
    [FieldOffset(8)]
    public string FileTime;
    [FieldOffset(16)]
    public int Id1;
    [FieldOffset(20)]
    public string Id2;
}

Код примеров изменен с оригинала, чтобы сделать этот вопрос короче.

Как бы я мог читать двоичные данные из файла в структуру?

c#   struct   io   binaryfiles    

521   7   16:03, 1st July, 2020