Ler arquivo binário em uma estrutura

Estou tentando ler dados binários usando c #. Eu tenho todas as informações sobre o layout dos dados nos arquivos que quero ler. Consigo ler os dados "pedaço por pedaço", ou seja, obtendo os primeiros 40 bytes de dados convertendo-os em uma string, obtendo os próximos 40 bytes.

Como existem pelo menos três versões ligeiramente diferentes dos dados, eu gostaria de ler os dados diretamente em uma estrutura. Parece muito mais certo do que ler "linha por linha".

Eu tentei a seguinte abordagem, mas sem sucesso:

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();

O fluxo é um FileStream aberto, do qual comecei a ler. Eu recebo umAccessViolationException ao usarMarshal.PtrToStructure.

O fluxo contém mais informações do que estou tentando ler, pois não estou interessado em dados no final do arquivo.

A estrutura é definida como:

[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;
}

O código de exemplos é alterado do original para tornar essa pergunta mais curta.

Como eu leria dados binários de um arquivo em uma estrutura?

questionAnswers(7)

yourAnswerToTheQuestion