elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 09:49  

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  fread() - ¿como saber la cantidad de bytes leidos? (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: fread() - ¿como saber la cantidad de bytes leidos? (Solucionado)  (Leído 1,618 veces)
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
fread() - ¿como saber la cantidad de bytes leidos? (Solucionado)
« en: 7 Febrero 2010, 17:11 »

Que tal compañeros, tengo una duda, la verdad pensé que solucionarla era fácil pero no encuentro alguna función que me ayude.

Esto viene de http://code.google.com/p/file2bits/source/browse/trunk/file2bits.c de la linea 97 y 98 uso fread y fwrite en distintos archivos.

Código
 fread(buffer,size,1,in);
fwrite(buffer,size,1,out);


El buffer es de tamaño size, el problema es que siempre escribo size bytes en el archivo de salida, sin importar cuantos hubiese leído en fread.

estaba haciendo lo siguiente:

Código
 flag_read = fread(buffer,size,1,in);
if(flag_read == 1) {
fwrite(buffer,size,1,out);
}
else {
//How many bytes were read?
}

Si el flag_read es igual a 1, entonces fread almaceno en buffer 1 objeto de tamaño size y entonces procedo a escribirlo normalmente. si no lo es entonces ¿como saber la cantidad de bytes leídos?

Saludos


« Última modificación: 7 Febrero 2010, 17:49 por Anon » En línea

Bien Super Divertido
@wifigdlmx
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: fread() - ¿como saber la cantidad de bytes leidos?
« Respuesta #1 en: 7 Febrero 2010, 17:37 »

Citar
The fread function copies nmemb items of data of size size from the named input stream into an array pointed to by ptr. An item of data is a sequence of bytes (not necessarily terminated by a null byte) of length size. fread stops appending bytes when nmemb items have been read, end of file has been reached, or an error has occurred. Upon returning, fread sets the file pointer in the stream pointing to the byte past the last byte that has been read. The contents of stream remain unchanged. The fread function returns the number of items actually read. If nmemb is zero, no action is taken and the function will return 0.

Si lo entendí bien, mientras lee, fread va desplazando el puntero, así que con una resta deberías de poder saber cuando se pudo leer correctamente.

Otra forma sería, luego de que se produjera un error, hacer otro fread leyendo byte por byte y contando cuantos se pudieron leer.

No estoy muy familiarizado con las funciones de la CRT, así que puede ser que dijera una salvajada  :xD.

Saludos


En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: fread() - ¿como saber la cantidad de bytes leidos?
« Respuesta #2 en: 7 Febrero 2010, 17:48 »

Gracias Hacker_Zero, apenas iba a postear que ya lo solucione:


Código
		fread(buffer,size,1,in);
fwrite(buffer,size,1,out);

Codigo nuevo:
Código
		flag_read = fread(buffer,sizeof(char),size,in);
fwrite(buffer,flag_read,1,out);

Me di cuenta que cuando estoy en fread, en lugar de especificar que lea 1 objeto de tamaño size, le puedo decir que lea size objetos  de tamaño sizeof(char)

Y ahora el flag_read almacena la cantidad de objetos leídos

Al momento de hacer el fwrite solo le especifico que escriba un objeto de tamaño flag_read

Ahora veo que tendré que cambiar el nombre de la variable, por bytes_read o algo asi xD

Lo que tu mencionas también lo pensé a hacer, sin embargo ya veo que la solución es mas simple de lo que pensaba.

Muchas gracias!!!
En línea

Bien Super Divertido
@wifigdlmx
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: fread() - ¿como saber la cantidad de bytes leidos? (Solucionado)
« Respuesta #3 en: 7 Febrero 2010, 17:58 »

El valor que devuelve fread es la cantidad de elementos leidos correctamente (el tercer parámetro de fread, size*3er parametro). En el caso que flag_read sea distinto del tercer parámetro de la función entonces o bien se ha producido un error o se ha alcanzado el final del archivo.

O bien, haciéndolo al revés.

Código
  result = fread (buffer,1,lSize,pFile);
 if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
 

http://www.cplusplus.com/reference/clibrary/cstdio/fread/

Edit: Recién leí que lo habías solucionado, igual tienes que hacer una comparación mas.

Un saludo!
« Última modificación: 7 Febrero 2010, 18:04 por Littlehorse » En línea


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: fread() - ¿como saber la cantidad de bytes leidos? (Solucionado)
« Respuesta #4 en: 7 Febrero 2010, 19:10 »

Si, la comparación por si hay un error en caso de que no sea el eof.

Aquí esta como lo he dejado:


Código
		bytes = fread(buffer,sizeof(char),size,in);
if(!feof(in) && ferror(in) != 0 ) {
fprintf(stderr,"fread():\n");
_exit(0);
}
else{
fwrite(buffer,bytes,1,out);
}

Muchas gracias por los consejos Littlehorse .

Saludos!!

En línea

Bien Super Divertido
@wifigdlmx
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(Solucionado) ¿Como saber si un ejecutable es x64 o x86?
Windows
pitoloko 5 3,074 Último mensaje 3 Abril 2011, 08:56
por pitoloko
fread y fwrite con clases
Programación C/C++
newone 4 939 Último mensaje 23 Junio 2011, 23:40
por newone
[C] Como saber [Solucionado]
Programación C/C++
ANTRUCK 4 578 Último mensaje 2 Agosto 2011, 18:47
por rir3760
Para saber cantidad de parametros
Ingeniería Inversa
RHL 5 469 Último mensaje 30 Diciembre 2011, 05:42
por Karman
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines