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:
Mostrar la cita
#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:%
Mostrar la cita
convertir
Mostrar la cita
como
Mostrar la cita
#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
#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:
Mostrar la cita
un
Mostrar la cita
la
Mostrar la cita
es
Mostrar la cita
quiero
Mostrar la cita
Ads by Google
Search Busqueda sugerida