Page 1 of 1
Duda sobre fread() en C++

Posted:
Sun Sep 16, 2012 8:43 am
by erkosone
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?
while( fread(&value,sizeof(value),1,wav) ) {
// fprintf(stderr,"%d\n", value);
if (value<0) { value=-value; }
sum += value;
cout << value << endl;
}
Re: Duda sobre fread() en C++

Posted:
Sun Sep 16, 2012 2:34 pm
by GINO
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.
Re: Duda sobre fread() en C++

Posted:
Sun Sep 16, 2012 5:17 pm
by necro_vampire
[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
Re: Duda sobre fread() en C++

Posted:
Sun Sep 16, 2012 6:02 pm
by erkosone
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.
Re: Duda sobre fread() en C++

Posted:
Sun Sep 16, 2012 6:24 pm
by necro_vampire
erkos, no digo que no funcione, sino que va a leer una posicion fuera del archivo
Re: Duda sobre fread() en C++

Posted:
Sun Sep 16, 2012 7:05 pm
by erkosone
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

Re: Duda sobre fread() en C++

Posted:
Sun Sep 16, 2012 7:20 pm
by necro_vampire
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