Duda sobre fread() en C++

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.

Duda sobre fread() en C++

Postby erkosone » Sun Sep 16, 2012 8:43 am

Tengo este bucle que no entiendo muy bien cuando se rompe.. alguien puede aclararme si el bucle termina cuando fread retorna un error?? creo que es así pero no estoy seguro al 100%.. creo que va leyendo short´s que es el tamaño de 'value' y cuando no hay mas datos por leer se rompe el bucle?? alguien puede confirmarme que es así exactamente?

Source Code (C++) [ Download ] [ Hide ]
  • while( fread(&value,sizeof(value),1,wav) ) {
  •         // fprintf(stderr,"%d\n", value);
  •         if (value<0) { value=-value; }
  •         sum += value;
  •         cout << value << endl;
  •     }
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda sobre fread() en C++

Postby GINO » Sun Sep 16, 2012 2:34 pm

No está muy bien usar eso así creo yo. fread te devuelve el número de bytes leídos. Si se corresponde con el número que quieres es que ha leído todos, sino es que hubo un error o se llego al final del archivo y no pudo leer todo. En ese código debe estar suponiendo que le va a devolver 0 cuando no hay más bytes por leer y entonces sale del bucle. Pero es mejor práctica usar el eof que ese método creo.
User avatar
GINO
 
Posts: 2823
Joined: Thu Jul 31, 2008 10:25 pm

Re: Duda sobre fread() en C++

Postby necro_vampire » Sun Sep 16, 2012 5:17 pm

[url]http://es.wikibooks.org/wiki/Programación_en_C/Manejo_de_archivos[/url]
(da error al colocar el enlace por el tilde?? si la direccion es con tilde LOL)

en los archivos se avanza secuencialmente, en tu bucle no preguntas si se llego al final del archivo, seguro va a leer fuera del rango del archivo

mientras no se llego al final del archivo (EOF), se lee (o lo que quieras
Image
Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.
User avatar
necro_vampire
 
Posts: 1372
Joined: Fri Oct 10, 2008 12:38 am
Location: Death Soul city???

Re: Duda sobre fread() en C++

Postby erkosone » Sun Sep 16, 2012 6:02 pm

Necro ese bucle funciona bien, no es mio, por eso no me quedaba claro como funcionaba, he visto que lee 1 byte por tirada, así que es lo que dice gino, cuando llegue al final del archivo retronará cero por que no leerá nada y saldrá.
Vale gracias, ahora me queda mas claro.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda sobre fread() en C++

Postby necro_vampire » Sun Sep 16, 2012 6:24 pm

erkos, no digo que no funcione, sino que va a leer una posicion fuera del archivo
Image
Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.
User avatar
necro_vampire
 
Posts: 1372
Joined: Fri Oct 10, 2008 12:38 am
Location: Death Soul city???

Re: Duda sobre fread() en C++

Postby erkosone » Sun Sep 16, 2012 7:05 pm

haa vale, claro, y como no la va a poder leer retornará cero y se romperá el bucle, en el fondo estabamos diciendo lo mismo con distintas palabras ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Duda sobre fread() en C++

Postby necro_vampire » Sun Sep 16, 2012 7:20 pm

erkosone wrote:haa vale, claro, y como no la va a poder leer retornará cero y se romperá el bucle, en el fondo estabamos diciendo lo mismo con distintas palabras ;)

exacto.
pero creo que debes tener cuidado cuando lees una cantidad de bytes y el archivo tiene menos de esa cantidad.
La función fread retorna el número de caracteres leídos correctamente, el cual puede ser menor que nmemb si se encuentra un error de lectura o un final de fichero. Si tamanyo o nmemb es cero, fread retorna cero, y el contenido del array y el estado del stream permanecen invariados.

http://c.conclase.net/librerias/?ansifun=fread
Image
Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.
User avatar
necro_vampire
 
Posts: 1372
Joined: Fri Oct 10, 2008 12:38 am
Location: Death Soul city???


Return to Offtopic

Who is online

Users browsing this forum: No registered users and 6 guests