Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2010, 22:06   #1
Drobot
Новичок
Джуниор
 
Регистрация: 19.02.2008
Сообщений: 2
По умолчанию Несхождения при копировании файлов

Здравствуйте, уважаемые форумчане! У меня возник вопрос при написании кое-какой программы. Имеется рукописная функция копирования файла (fread, fwrite):

Код:
#include <stdio.h>
#include <stdlib.h>
#define L 2048

int main(int argc, char *argv[]) {
    FILE *fin, *fout;
    int *buffer;
    int numread, numwritten;

    buffer = (int *)malloc(sizeof(int) * L); 
    fin = fopen("ru.png", "rb");
    fout = fopen("ru_copy.png", "wb");
    fseek(fin, 0, SEEK_SET);
    fseek(fout, 0, SEEK_SET);
    do {
        numread = fread(buffer, sizeof(int), L, fin);
        numwritten = fwrite(buffer, sizeof(int), numread, fout);
        printf("Read %d bytes, written %d bytes\n", numread, numwritten);
    } while (!feof(fin)); 
    fclose(fin);
    fclose(fout);

    return 0;
}
файл действительно копируется, но когда я сверяю md5 хэш, то получаю следующее:
Код:
[freesky@freesky-desktop xor]$ md5sum ru.png
4c89ee1d781009a457358f79f74a1339  ru.png
[freesky@freesky-desktop xor]$ md5sum ru_copy.png
b2c1971a8b9917425de944124f72e017  ru_copy.png
Не подскажете ли в чем проблема и как ее устранить? Спасибо
Drobot вне форума Ответить с цитированием
Старый 20.09.2010, 23:25   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

потому что считываешь из файла инты, в котором хранятся байты. и если в файле кол бо байт не кратно sizeof(int), то твои файлы будут различаться.

и 2, в линуксе все файлы бинарные, нет нужны флаг b указывать fopen-у
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 21.09.2010, 13:00   #3
Drobot
Новичок
Джуниор
 
Регистрация: 19.02.2008
Сообщений: 2
По умолчанию

большое спасибо за подсказку! теперь, поменяв sizeof(int) на 1 все копируется 1 в 1. спасибо

Последний раз редактировалось Drobot; 21.09.2010 в 13:03.
Drobot вне форума Ответить с цитированием
Старый 21.09.2010, 15:39   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

поменяй буфер на однобайтный тип char или unsigned char, смотря что тебе нужнее. если пофиг - то можно просто char. в буфер интов есть смысл читать только в том случае, если ты знаешь, что в твоем файле хранятся инты, sizeof которых равен 4
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезапись при копировании/перемещении Shouldercannon Общие вопросы Delphi 4 12.09.2010 02:32
Потеря качества изображения при копировании Herly Общие вопросы Delphi 14 11.02.2010 20:08
установка виндовс ХР: ошибки при копировании orcnodead Windows 11 22.12.2009 22:35
Проблема в Excel при копировании листа kirill55 Помощь студентам 0 06.11.2009 23:15
Почему ошибка при копировании? valerij Microsoft Office Excel 8 02.05.2009 01:49