Leer y Grabar una structura de un archivo binario

21/07/2005 - 13:15 por Manuel Candal | Informe spam
Tengo la siguiente estructura como esta a la hora de manejar una serie de
archivos binarios:

struct ARCHIVOS
{
byte tipo;
short version;
int numarchivos;
ARCHIVO archivos[];
}

struct ARCHIVO
{
TEXTO nombrearchivo;
int lenarchivo;
byte[] contenido;
}

struct TEXTO
{
int lentexto;
char[] texto;
}

Me interesa acelerar la carga del archivo binario, ya que ocupa más de 200
Mb.
He visto alguna página donde se daba la posibilidad de leer/grabar en
archivo directamente con la estructura, utilizando
System.Runtime.Interopservices y manejando atributos como MarshalAs y
StructLayout.

http://www.codeproject.com/csharp/F...eInput.asp
http://csharp.codenewbie.com/articl...age_1.html

Intentando aplicarlo veo que los array necesitan una longitud constante
definida, pero en mi caso utilizo arrays dinámicos.
¿Hay alguna forma de pasar este problema? ¿Alguna alternativa y que sea
rápida?



Un saludo.


.NET 1.1

Preguntas similare

Leer las respuestas

#1 Mariano Omar Rodriguez
22/07/2005 - 01:31 | Informe spam
No se si te sirva pero podrias usar un BufferedStream y escribir todo el
codigo como manejado.

Mariano

"Manuel Candal" <[ mcandal ] @ [ hotmail ] . [ com ]> wrote in message
news:%
Tengo la siguiente estructura como esta a la hora de manejar una serie de
archivos binarios:

struct ARCHIVOS
{
byte tipo;
short version;
int numarchivos;
ARCHIVO archivos[];
}

struct ARCHIVO
{
TEXTO nombrearchivo;
int lenarchivo;
byte[] contenido;
}

struct TEXTO
{
int lentexto;
char[] texto;
}

Me interesa acelerar la carga del archivo binario, ya que ocupa más de 200
Mb.
He visto alguna página donde se daba la posibilidad de leer/grabar en
archivo directamente con la estructura, utilizando
System.Runtime.Interopservices y manejando atributos como MarshalAs y
StructLayout.

http://www.codeproject.com/csharp/F...eInput.asp
http://csharp.codenewbie.com/articl...age_1.html

Intentando aplicarlo veo que los array necesitan una longitud constante
definida, pero en mi caso utilizo arrays dinámicos.
¿Hay alguna forma de pasar este problema? ¿Alguna alternativa y que sea
rápida?



Un saludo.


.NET 1.1


Respuesta Responder a este mensaje
#2 Manuel Candal
22/07/2005 - 11:16 | Informe spam
Para grabar utilizo FileStream con BinaryWriter que según tengo entendido ya
tiene el buffer integrado.

El problema es adaptar la estructura de forma que cuando se adapte a un byte
array no utilice la dirección de memoria en los campos de longitud variable,
sino el contenido de esa dirección.

Utilizando los enlaces que puse veo que al grabar los campos fijos se graban
correctamente, pero el campo char[] texto; no se graba su contenido, sino la
dirección de memoria donde se encuentra el contenido.



"Mariano Omar Rodriguez" escribió en el mensaje
news:%
No se si te sirva pero podrias usar un BufferedStream y escribir todo el
codigo como manejado.

Mariano

"Manuel Candal" <[ mcandal ] @ [ hotmail ] . [ com ]> wrote in message
news:%
Tengo la siguiente estructura como esta a la hora de manejar una serie de
archivos binarios:

struct ARCHIVOS
{
byte tipo;
short version;
int numarchivos;
ARCHIVO archivos[];
}

struct ARCHIVO
{
TEXTO nombrearchivo;
int lenarchivo;
byte[] contenido;
}

struct TEXTO
{
int lentexto;
char[] texto;
}

Me interesa acelerar la carga del archivo binario, ya que ocupa más de
200 Mb.
He visto alguna página donde se daba la posibilidad de leer/grabar en
archivo directamente con la estructura, utilizando
System.Runtime.Interopservices y manejando atributos como MarshalAs y
StructLayout.

http://www.codeproject.com/csharp/F...eInput.asp
http://csharp.codenewbie.com/articl...age_1.html

Intentando aplicarlo veo que los array necesitan una longitud constante
definida, pero en mi caso utilizo arrays dinámicos.
¿Hay alguna forma de pasar este problema? ¿Alguna alternativa y que sea
rápida?



Un saludo.


.NET 1.1






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