Estoy tratando de leer datos binarios usando C#. Tengo toda la información sobre el diseño de los datos en los archivos que quiero leer. Puedo leer los datos "fragmento por fragmento", es decir, obtener los primeros 40 bytes de datos convirtiéndolos en una cadena, obtener los siguientes 40 bytes.Lea el archivo binario en una estructura
Dado que hay al menos tres versiones ligeramente diferentes de los datos, me gustaría leer los datos directamente en una estructura. Simplemente se siente mucho más bien que leyéndola "línea por línea".
He intentado el siguiente enfoque, pero en vano:
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();
La corriente es un FileStream abierto de la que he comenzado a leer. Obtengo AccessViolationExceptio
n cuando uso Marshal.PtrToStructure
.
La secuencia contiene más información de la que estoy tratando de leer porque no estoy interesado en los datos al final del archivo.
La estructura se define 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;
}
El código se cambia de ejemplos original para hacer esta pregunta más corto.
¿Cómo leería los datos binarios de un archivo en una estructura?
BinaryFormatter tiene su propio formato para datos binarios, que está bien si está leyendo/escribiendo los datos usted mismo. no es útil si obtiene un archivo de otra fuente. – russau