Я пытаюсь написать функцию, которая сравнивает содержимое двух файлов.
Я хочу, чтобы она возвращала 1, если файлы одинаковые, и 0, если разные.
ch1
и ch2
работает как буфер, и я использовал fgets
для получения содержимого моих файлов.
Я думаю, что с указателем eof
что-то не так, но я не уверен.FILE
переменные задаются в командной строке.
PS Он работает с небольшими файлами размером менее 64 КБ, но не работает с большими файлами (например, с фильмами 700 МБ или 5 МБ файлов .mp3).
Есть идеи, как это решить?
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;
}
РЕДАКТИРОВАТЬ: я улучшил эту функцию с включением ваших ответов.Но он сравнивает только первый буфер -> но с исключением -> Я понял, что он перестает читать файл, пока не достигнет 1А (вложенный файл).Как мы можем заставить его работать?
EDIT2: Задача решена (рабочий код прилагается).Спасибо всем за помощь!