Copia de ficheros binarios.

Iniciado por cartorami, 5 Septiembre 2016, 11:43 AM

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

cartorami

Bueno días!

Escribo porque tengo un problemilla con un proyecto de C que estoy realizando. Este proyecto tiene que realizar una copia de ficheros de manera remota y según lo tengo codificado, realiza la copia pero solo de manera parcial. Digamos que si el fichero original tuviese 100 líneas (por decir algo), la copia tendrá 85 lineas bien copiadas, pero nada más, no termina de copiarlo.

El procedimiento que sigo en el código es el siguiente:

-Realizo un bucle while que estará iterando hasta localizar el final del fichero.
-Dentro, voy sacando a una variable "linea" cada una de las lineas con fgets del fichero que quiero copiar.
-En una variable "num_caracteres" voy sumando la longitud de cada una de estas lineas, para ver el numero de caracteres de todo el fichero binario.


En código:


int num_caracteres = 0;
char * linea = malloc(1000);

while (feof(fichero)==0)
    if (fgets(linea,1000,fichero))
    num_caracteres+=strlen(linea);




//Llegado este punto tengo un printf que me dice que hay 18960 caracteres en el fichero

Una vez calculado el numero de caracteres, defino una cadena de caracteres llamada "datos" de tamaño "num_caracteres", que es donde debo meter todo el contenido del fichero para enviar y que se realice la copia de manera remota.
Una vez hago esto llamo a una función que recibe como parámetros las variables datos, num_caracteres y nombredelfichero(que no es mas que el nombre del fichero del que voy a copiar como cadena de char).
Realizo un fopen (devolverá fichero_para_lectura) de dicha cadena y escribo la siguiente orden:

                              fread(datos,sizeof(char),num_caracteres,fichero_para_lectura)

devuelvo la variable "datos"(se supone que, ahora sí, con todo el contenido del fichero,aunque se ve que no) y la envío con funciones que se nos han proporcionado.


Como digo el problema es que se supone que "datos" debería tener todo el contenido del fichero, sin embargo el contenido es solo parte de este.

Si alguien sabe dónde esta el error o qué estoy planteando mal estaría muy agradecido de leerle, un saludo! ;)


MAFUS

El problema es que usas funciones especializadas en cadenas de texto para leer datos binarios. No te va a contar los caracteres nulos ni lo que haya a partir de ellos.
Puedes usar el par fseek/ftell para obtener el tamaño del archivo en bytes o puedes ir recogiendo porciones del archivo con fred e ir dejándolos en un buffer hasta que llegues al final del archivo.
Pero no uses funciones de texto para archivos binarios.

cartorami

Siii! Muchas gracias!

Justo había probado a contar los caracteres mediante comandos y me ha extrañado que me diese la suma en num_caracteres 18000 porque el comando me indicaba 170mil caracteres, así que el fallo está justo ahí.

Mil gracias! ;-) ;-) ;-) ;D ;D ;D