Duda LECTURA ARCHIVOS BINARIOS

Iniciado por Omar_2013, 11 Mayo 2014, 20:01 PM

0 Miembros y 1 Visitante están viendo este tema.

Omar_2013

Buen Día, mi duda es acerca de la lectura de archivos Binarios, este es el código:

Código (cpp) [Seleccionar]

void CargarInformacion(struct TNodo<Usuarios> **Lista)
{
     struct Usuarios Load;
     
     ifstream Datos("Base De Datos.dat", ios::binary);
     
     if (Datos.good())
        while (!Datos.eof())
              if ( Datos.read((char*)&Load, sizeof(Load)) )
                 InsertarFinal(Lista, Load);
                 
     Datos.close();
}


La Funcion funciona!!! pero no se por que hay que colocar esto

Código (cpp) [Seleccionar]
Datos.read((char*)&Load, sizeof(Load))

dentro de un if, le pregunte a alguien pero me dice que es para que no lea 2 veces lo mismo, pero esa es la duda... por que????


Gracias por su tiempo.  ;)

ivancea96

read() retorna el número de bytes leídos. Si leyese 0 bytes, qué pasaría?
Ese if() comprueba que se lea un número diferente de 0 bytes.

Omar_2013

Muchas Gracias por aclararme la duda.

ivancea96

#3
Espera Espera, me equivoqué con otro read().

El return de ese read() es el objeto ifstream. Un ifstream retorna TRUE si todo va bien, y retorna FALSE si hubo errores.

EDITO: Por si te ayuda, CPlusPlus


rir3760

Por cierto en ese bucle:
Código (cpp) [Seleccionar]
while (!Datos.eof())
   if ( Datos.read((char*)&Load, sizeof(Load)) )
      InsertarFinal(Lista, Load);

No es necesario utilizar la función miembro eof, se puede acortar a:
Código (cpp) [Seleccionar]
while (Datos.read((char *) &Load, sizeof(Load)))
   InsertarFinal(Lista, Load);


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Omar_2013