struct y BinaryStreams

28/02/2006 - 23:56 por Leonardo Hernández | Informe spam
Estoy teniendo problemas para grabar struct en archivos binarios, he visto
algunos ejemplos que utilizan Marshal.SizeOf(MiStruct), pero con esto no se
obtiene el tamaño real si por ejemplo la structura contiene en strings.

Con C++ se podía crear una struct de tamaño fíjo usando por ejemplo:

struct Persona {
int Id;
char nombre[40];
}

Pero en C# no tengo forma de definir un array de tamaño fijo (al menos no la
encuentro).

Concretamente necesito definir un registro de tamaño fijo para un archivo
binario.

Espero que alguien me pueda dar una pista.

Gracias, Leonardo

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
01/03/2006 - 00:35 | Informe spam
Hola Leonardo,

Precisamente con ese fin, C# 2.0 (VS 2005) incluyó en el lenguaje los
buffers de tamaño fijo (solo en bloques unsafe):

http://msdn2.microsoft.com/en-us/li...ewsya.aspx

Slds - Octavio



"Leonardo Hernández" escribió en el mensaje
news:
Estoy teniendo problemas para grabar struct en archivos binarios, he visto
algunos ejemplos que utilizan Marshal.SizeOf(MiStruct), pero con esto no
se obtiene el tamaño real si por ejemplo la structura contiene en strings.

Con C++ se podía crear una struct de tamaño fíjo usando por ejemplo:

struct Persona {
int Id;
char nombre[40];
}

Pero en C# no tengo forma de definir un array de tamaño fijo (al menos no
la encuentro).

Concretamente necesito definir un registro de tamaño fijo para un archivo
binario.

Espero que alguien me pueda dar una pista.

Gracias, Leonardo



Respuesta Responder a este mensaje
#2 Leonardo Hernández
01/03/2006 - 02:56 | Informe spam
Octavio, es exatamente lo que me estaba pasando, me almacenaba la referencia
al array. Me alegro que se lo hallan solucionado para VS 2005.

Temo que teniendo VS 2003 deberé crear una dll en C++ que realice el grabado
y lectura desde el archivo, lo cuál no me deja muy contento.

O pasar todos los campos a un array de bytes que siempre tenga el mismo
tamaño. El objetivo final es utilizar Seek para ir a un regristro concreto.

Gracias por tu ayuda.
Leonardo



"Octavio Hernandez" escribió en el mensaje
news:uEfSk%
Hola Leonardo,

Precisamente con ese fin, C# 2.0 (VS 2005) incluyó en el lenguaje los
buffers de tamaño fijo (solo en bloques unsafe):

http://msdn2.microsoft.com/en-us/li...ewsya.aspx

Slds - Octavio



"Leonardo Hernández" escribió en el mensaje
news:
Estoy teniendo problemas para grabar struct en archivos binarios, he
visto algunos ejemplos que utilizan Marshal.SizeOf(MiStruct), pero con
esto no se obtiene el tamaño real si por ejemplo la structura contiene en
strings.

Con C++ se podía crear una struct de tamaño fíjo usando por ejemplo:

struct Persona {
int Id;
char nombre[40];
}

Pero en C# no tengo forma de definir un array de tamaño fijo (al menos no
la encuentro).

Concretamente necesito definir un registro de tamaño fijo para un archivo
binario.

Espero que alguien me pueda dar una pista.

Gracias, Leonardo







Respuesta Responder a este mensaje
#3 Octavio Hernandez
01/03/2006 - 15:54 | Informe spam
Leo,

Me alegro que se lo hallan solucionado para VS 2005.



Bueno, no es realmente que lo hayan "solucionado". Han añadido una nueva
posibilidad, pero sólo para código no seguro, en el código "normal" sigue
siendo como antes...

Temo que teniendo VS 2003 deberé crear una dll en C++ que realice el
grabado y lectura desde el archivo, lo cuál no me deja muy contento.



Creo que sí...

O pasar todos los campos a un array de bytes que siempre tenga el mismo
tamaño.



Eso tampoco te valdrá - los arrays de .NET también son tipos-referencia!

Slds - Octavio
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida