Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сравнение двух файлов по байтно

82K
20 мая 2012 года
Almaz_KG
4 / / 20.05.2012
Надо сравнить два любых файла, и вывести сообщение
1) Если они одинаковые - "файлы идентичны"
2) Если они не однаковые - "файлы не идентичны + номер байта в котором они различаются"

Я вроде написал, но что-то не работает, а именно ничего не выводится.
Код:
#include <locale.h>
#include <stdio.h>
#include <conio.h>

int main(int argc, char *args[])
{
    setlocale(LC_ALL, "rus");

    int counter  = 0;
    FILE *file1, *file2;

    if (argc == 3)
    {
        if ((file1 = fopen(args[1], "rb")) != NULL)
        {
            if ((file2 = fopen(args[2], "rb")) != NULL)
            {
                bool ch1, ch2;
                do
                {
                    ch1 = getc(file1);
                    ch2 = getc(file2);
                    if (ch1 != ch2)
                    {
                        counter++;
                        printf("Файлы не идентичны!!!\nНомер байта в котором они расходятся %i", counter);
                    }
                }
                while(ch1 != EOF);
                if (counter == 0)
                    printf("Два файла полностью идентичны");
            }
            else
                printf("Не удается открыть второй файл!");
        }
        else
            printf("Не удается открыть первый файл!");
    }
    else
        printf("Вы не ввели пути к файлам!");

    _getch();
}
Помогите найти ошибку!!!
78K
21 мая 2012 года
pashtet13
15 / / 02.05.2012
Ну как минимум не понятно почему у тебя

 
Код:
bool ch1, ch2;
должно быть
 
Код:
char ch1, ch2;
Да и переменную counter++; из блока if перемести как то так

Код:
do
                {
            counter++;
                    ch1 = getc(file1);
                    ch2 = getc(file2);
                    if (ch1 != ch2)
                    {
                       
                        printf("Файлы не идентичны!!!\nНомер байта в котором они расходятся %i", counter);
                    }
                }
                while(ch1 != EOF);
82K
21 мая 2012 года
Almaz_KG
4 / / 20.05.2012
Цитата: pashtet13
Ну как минимум не понятно почему у тебя

 
Код:
bool ch1, ch2;
должно быть
 
Код:
char ch1, ch2;



Спасибо - разобрался=)))
Я просто исходил из того, что мол получили бинарник файла - то бишь о переменные должны быть булевские=))))
Спасибо!!

277
21 мая 2012 года
arrjj
1.7K / / 26.01.2011
Читай блоками в массив и сравнивай уже массивы в памяти - наааамного быстрее будет.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог