leer desde un fichero binario a una struct

19/09/2003 - 02:30 por Javi P. | Informe spam
Hola,

Me gustaria saber como podria leer un fichero en modo binario usando como
buffer una estructura como siempre se habia hecho en C/C++ (yo lo quiero
hacer en c#)

en C hariamos algo asi:
size_t read_data( FILE *fp, struct student_data *p )
{
return( fread( p, sizeof( struct student_data ), 1, fp ) );
}

Preguntas similare

Leer las respuestas

#1 Ignacio Nicolás Rodríguez
19/09/2003 - 03:22 | Informe spam
Creas, por ejemplo en la estructura, un método que toma como parámetro un
StreamReader y utilizas para cada parte un ReadXxx(). El equivalente de la
lectura binaria del paquete completo no existe, porque no se puede convertir
un arreglo de bytes directamente a otro tipo de dato cualquiera. Y esto es
una ventaja que aporta seguridad a nuestros programas.

Saludos. Ignacio Nicolás Rodríguez, MCSD.Net/MCT.--

"Javi P." escribió en el mensaje
news:
Hola,

Me gustaria saber como podria leer un fichero en modo binario usando como
buffer una estructura como siempre se habia hecho en C/C++ (yo lo quiero
hacer en c#)

en C hariamos algo asi:
size_t read_data( FILE *fp, struct student_data *p )
{
return( fread( p, sizeof( struct student_data ), 1, fp ) );
}




Respuesta Responder a este mensaje
#2 Javi P.
19/09/2003 - 11:42 | Informe spam
Muchas gracias de nuevo Ignacio,
Cuando dices un StreamReader supongo que querras decir un BinaryReader que
es el que te perimite recoger lo leido en cualquiera de los multiples
formatos, por ejemplo
avimain.dwMicroSecPerFrame=br.ReadUInt32();
avimain.dwMaxBytesPerSec=br.ReadUInt32();

Esto lo queria para leer la cabecera de un archivo avi, ya que al final no
me servia lo de la API de windows, de esta forma estoy leyendo todo lo que
me interesa de un avi.

Gracias Ignacio

Un Saludo



"Ignacio Nicolás Rodríguez" escribió en el
mensaje news:%
Creas, por ejemplo en la estructura, un método que toma como parámetro un
StreamReader y utilizas para cada parte un ReadXxx(). El equivalente de la
lectura binaria del paquete completo no existe, porque no se puede


convertir
un arreglo de bytes directamente a otro tipo de dato cualquiera. Y esto es
una ventaja que aporta seguridad a nuestros programas.

Saludos. Ignacio Nicolás Rodríguez, MCSD.Net/MCT.--

"Javi P." escribió en el mensaje
news:
> Hola,
>
> Me gustaria saber como podria leer un fichero en modo binario usando


como
> buffer una estructura como siempre se habia hecho en C/C++ (yo lo quiero
> hacer en c#)
>
> en C hariamos algo asi:
> size_t read_data( FILE *fp, struct student_data *p )
> {
> return( fread( p, sizeof( struct student_data ), 1, fp ) );
> }
>
>
>
>


Respuesta Responder a este mensaje
#3 Rodrigo Corral González
19/09/2003 - 12:43 | Informe spam
Ejemplo de como escribir y leer un struct usando serializacion:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;

namespace serialize_struct
{
[Serializable()]
struct MyStruct
{
public int num;
public String str;
};

class EntryPoint
{
[STAThread]
static void Main(string[] args)
{
MyStruct mystruct_to_out = new MyStruct();
mystruct_to_out.num = 10;
mystruct_to_out.str = "Hola";

FileStream fsout = new FileStream(@"C:\temp\MyStruct.bin",
System.IO.FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fsout, mystruct_to_out);
fsout.Close();

FileStream fsin = new FileStream(@"C:\temp\MyStruct.bin",
System.IO.FileMode.Open);
MyStruct mystruct_to_in = (MyStruct)bf.Deserialize(fsin);

Console.WriteLine(mystruct_to_in.num);
Console.WriteLine(mystruct_to_in.str);

}
}
}


Un saludo
Rodrigo Corral González
Respuesta Responder a este mensaje
#4 Ignacio Nicolás Rodríguez
22/09/2003 - 14:36 | Informe spam
Efectivamente, Javier.

Como te digo, el hecho de que no se puedan leer estructuras directamente
desde los datos en binario, tenemos que acostumbarnos a verlo como una
ventaja. ¡Pero es mucho más trabajo, eh!

A veces estos puntos hacen que uno prefiera Managed C++ sobre C# en algunos
casos.

Te saludo. Ignacio.//

"Javi P." escribió en el mensaje
news:
Muchas gracias de nuevo Ignacio,
Cuando dices un StreamReader supongo que querras decir un BinaryReader que
es el que te perimite recoger lo leido en cualquiera de los multiples
formatos, por ejemplo
avimain.dwMicroSecPerFrame=br.ReadUInt32();
avimain.dwMaxBytesPerSec=br.ReadUInt32();

Esto lo queria para leer la cabecera de un archivo avi, ya que al final no
me servia lo de la API de windows, de esta forma estoy leyendo todo lo que
me interesa de un avi.

Gracias Ignacio

Un Saludo



"Ignacio Nicolás Rodríguez" escribió en el
mensaje news:%
> Creas, por ejemplo en la estructura, un método que toma como parámetro


un
> StreamReader y utilizas para cada parte un ReadXxx(). El equivalente de


la
> lectura binaria del paquete completo no existe, porque no se puede
convertir
> un arreglo de bytes directamente a otro tipo de dato cualquiera. Y esto


es
> una ventaja que aporta seguridad a nuestros programas.
>
> Saludos. Ignacio Nicolás Rodríguez, MCSD.Net/MCT.--
>
> "Javi P." escribió en el mensaje
> news:
> > Hola,
> >
> > Me gustaria saber como podria leer un fichero en modo binario usando
como
> > buffer una estructura como siempre se habia hecho en C/C++ (yo lo


quiero
> > hacer en c#)
> >
> > en C hariamos algo asi:
> > size_t read_data( FILE *fp, struct student_data *p )
> > {
> > return( fread( p, sizeof( struct student_data ), 1, fp ) );
> > }
> >
> >
> >
> >
>
>


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