Por lo tanto, estoy tratando de escribir la función, que compara el contenido de dos archivos, pero yo no funciona.Comparar dos archivos
Quiero que devuelva 1 si los archivos son iguales y 0 si son diferentes.
ch1 y ch2 funciona como un búfer, y usé fgets para obtener el contenido de mis archivos.
Creo que hay algo mal con el puntero eof, pero no estoy seguro. Las variables FILE se dan dentro de la línea de comando.
P.S. Funciona con archivos pequeños con un tamaño inferior a 64 KB, pero se alimenta con archivos más grandes (películas de 700 MB, por ejemplo, o mp3 de 5 MB).
¿Alguna idea, cómo solucionarlo?
int compareFile(FILE* file_compared, FILE* file_checked)
{
bool diff = 0;
int N = 65536;
char* b1 = (char*) calloc (1, N+1);
char* b2 = (char*) calloc (1, N+1);
size_t s1, s2;
do {
s1 = fread(b1, 1, N, file_compared);
s2 = fread(b2, 1, N, file_checked);
if (s1 != s2 || memcmp(b1, b2, s1)) {
diff = 1;
break;
}
} while (!feof(file_compared) || !feof(file_checked));
free(b1);
free(b2);
if (diff) return 0;
else return 1;
}
EDITAR: He mejorado esta función con la inclusión de Your anwers. Pero solo está comparando el primer buffer solamente -> pero con excepción -> Me di cuenta de que deja de leer el archivo hasta que alcanza el carácter 1A (archivo adjunto). ¿Cómo podemos hacerlo funcionar?
EDIT2: Tarea resuelta (código de trabajo adjunto). Gracias a todos por la ayuda!
¡No use 'strcmp' para comparar dos almacenamientos intermedios de datos binarios !!!! Se liberará tan pronto como vea un carácter terminador NULO. –
¿qué quiere decir con "se molesta"? ¿Qué * exactamente * sucede? – Naveen
Lo que quise decir es que el programa deja de funcionar después de la primera iteración. – Christoph