Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
#1

двоичные файлы,чтение\запись - C++

25.11.2009, 12:31. Просмотров 1962. Ответов 11
Метки нет (Все метки)

задача,если упрощенно, записать в новый двоичный файл данные исходного файла в блоках по ,допустим, 20 байт.

брал целочисленный массив А[20/sizeof(int)], тогда
fread ((void*)A, sizeof(int), 20/(sizeof(int)), f1); --считывает из исходного файла данные и записывает их в массив А.

а тогда верно ли, что
fwrite ((void*)А,sizeof(int),20/(sizeof(int)),f2) записывает данные в таком же виде,как они были в исходном,или же данные записываются в новом целочисленном формате?

второй вопрос,к этой же задаче.. при таком неявном преобразовании в тип int, у нас могут получаться абсолютно любые числа как элементы массива А,включая и 0,и -1 ? это важно ,поскольку ,когда в исходном файле останется несчитанными например 8 байт (меньше 20) , то в новый файл надо будет записать не все элементы массива а только несколько первых. для этого я хочу обнулять массив каждый раз перед чтением из исходного ,а затем записывать его элементы в новый файл,пока не встретится элемент =0. правильно ли это? ибо если какието данные исходного файла могут кодироваться нулями надо этот способ не подойдет
заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2009, 12:31     двоичные файлы,чтение\запись
Посмотрите здесь:

Чтение и запись в текстовые файлы. C++
Бинарные файлы, чтение и запись C++
двоичные файлы C++
Двоичные файлы C++
двоичные файлы C++
Запись и чтение, файлы C++
Двоичные файлы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 14:37     двоичные файлы,чтение\запись #2
Слишком много букав.
Сформулируй вопросы(если имеются).
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
25.11.2009, 15:16  [ТС]     двоичные файлы,чтение\запись #3
1)как скопировать данные порциями по N байт из одного двоичного файла в новый двоичный файл чтобы содержимое нового полностью совпадало с содержимым первого?
2)
int А[N]
fread ((void*)А,sizeof(int),N,f)
вопрос- в случае,когда размер файла f меньше чем N*sizeof(int) , как определить сколько элементов массива А[N] остались незаполненными?
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 15:23     двоичные файлы,чтение\запись #4
Цитата Сообщение от nickson91 Посмотреть сообщение
1)как скопировать данные порциями по N байт из одного двоичного файла в новый двоичный файл чтобы содержимое нового полностью совпадало с содержимым первого?
Ответ очевиден - Порциями читать, и так же записывать.


Цитата Сообщение от nickson91 Посмотреть сообщение
как определить сколько элементов массива А[N] остались незаполненными?
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
Функция fread() возвращает кол-во прочитанных элементов размером size. Если size = 1, то вернет кол-во прочитанных байт. Все
easybudda
Эксперт С++
9441 / 5464 / 926
Регистрация: 25.07.2009
Сообщений: 10,485
25.11.2009, 15:36     двоичные файлы,чтение\запись #5
nickson91, определения функций fread и fwrite
Код
size_t fread(void *буфер, size_t колич_байт, size_t счетчик, FILE *уф);
size_t fwrite(const void *буфер, size_t колич_байт, size_t счетчик, FILE *уф);
первая возвращает количество прочитанных элементов, вторая - количество записанных.
А дальше просто всё... Читаете из входного файла в буфер n байт. Если прочиталось меньше, проверяете состояние файла (просто кончился, или случилось что - errno == EBADF, ferror(fp) == 1, etc...), пишете в выходной файл столько,сколько прочиталось (конечно, если входной файл просто кончился), проверяете, сколько записалось, и, если опять не сошлось - выдаёте сообщение об ошибке записи
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
25.11.2009, 15:39  [ТС]     двоичные файлы,чтение\запись #6
ох,точно, fread же еще и возвращает целое значение )
спасибо!
а по поводу первого, вопрос именно в том, не изменятся ли данные при копировании файлов если мы копируем "через" вот этот целочисленный массив А ? тоесть массив А в качестве буфера
easybudda
Эксперт С++
9441 / 5464 / 926
Регистрация: 25.07.2009
Сообщений: 10,485
25.11.2009, 15:41     двоичные файлы,чтение\запись #7
Цитата Сообщение от nickson91 Посмотреть сообщение
а по поводу первого, вопрос именно в том, не изменятся ли данные при копировании файлов если мы копируем "через" вот этот целочисленный массив А ?
Копируйте через массив char[] и ни о чём плохом не думайте
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 15:41     двоичные файлы,чтение\запись #8
По поводу первого - нет.
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
25.11.2009, 15:50  [ТС]     двоичные файлы,чтение\запись #9
последний дурацкий вопрос, чтобы посмотреть сколько прочиталось элементов размера size, мы присваиваем какойто переменной значение fread (.....) . Надо ли вызывать еще раз функцию fread чтобы собственно перенести элементы в буфер или все делается в одной строчке:
X=fread (....) ?
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 15:51     двоичные файлы,чтение\запись #10
Цитата Сообщение от nickson91 Посмотреть сообщение
чтобы посмотреть сколько прочиталось элементов размера size, мы присваиваем какойто переменной значение fread (.....)
Да.

Цитата Сообщение от nickson91 Посмотреть сообщение
или все делается в одной строчке
В одной.
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
25.11.2009, 15:52  [ТС]     двоичные файлы,чтение\запись #11
большое Вам спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2009, 15:52     двоичные файлы,чтение\запись
Еще ссылки по теме:

fwrite\fread: чтение и запись в бинарные файлы C++
Запись/чтение структур (файлы) + разница между FILE * и <fstream> C++
C++ Длинная арифметика(чтение и запись в файлы)
C++ Двоичные файлы
C++ Файлы (чтение/запись)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 15:52     двоичные файлы,чтение\запись #12
успехов.
Yandex
Объявления
25.11.2009, 15:52     двоичные файлы,чтение\запись
Ответ Создать тему
Опции темы

Текущее время: 20:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru