Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Omar_2013 en 11 Mayo 2014, 20:01 PM

Título: Duda LECTURA ARCHIVOS BINARIOS
Publicado por: Omar_2013 en 11 Mayo 2014, 20:01 PM
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.  ;)
Título: Re: Duda LECTURA ARCHIVOS BINARIOS
Publicado por: ivancea96 en 11 Mayo 2014, 20:08 PM
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.
Título: Re: Duda LECTURA ARCHIVOS BINARIOS
Publicado por: Omar_2013 en 11 Mayo 2014, 20:11 PM
Muchas Gracias por aclararme la duda.
Título: Re: Duda LECTURA ARCHIVOS BINARIOS
Publicado por: ivancea96 en 11 Mayo 2014, 20:11 PM
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 (http://www.cplusplus.com/reference/istream/istream/read/)
Título: Re: Duda LECTURA ARCHIVOS BINARIOS
Publicado por: Omar_2013 en 11 Mayo 2014, 20:16 PM
OK.   :)
Título: Re: Duda LECTURA ARCHIVOS BINARIOS
Publicado por: rir3760 en 11 Mayo 2014, 20:24 PM
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
Título: Re: Duda LECTURA ARCHIVOS BINARIOS
Publicado por: Omar_2013 en 11 Mayo 2014, 20:28 PM
Gracias lo tendré en cuenta.