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

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

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

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

25.11.2009, 12:31. Просмотров 1983. Ответов 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++
Здравствуйте. Помогите, пожалуйста, разобраться с кодом. я могу считать числа из строки с помощью getline и strtod. но сейчас возникла...

Запись и чтение файлов на диск и с диска - C++
НАПИСАТЬ ДВЕ ПРОГРАММЫ 1) СОЗДАНИЯ ФАЙЛА С УКАЗАННЫМИ ПОЛЯМИ И 2) СЧИТЫВАНИЕ ДАННЫХ ИЗ ФАЙЛА И ВЫВОД НА ЭКРАН МОНИТОРА В ВИДЕ ТАБЛИЦЫ,...

Запись и чтение файлов на диск и с диска - C++
Добрый день,помогите пожалуйста составить две программы. 1)Создать файл с полями:Фамилия,№ экзаменационного билета,зачет\незачет. ...

Запись и чтение структуры из файлов, сортировка по полю - C++
у меня есть 2 проги в одной создается файл а в другой обработка #include <cstdio> const char fileName =...

Запись и чтение бинарных файлов. Программа крашится при закрытии консольного окна - C++
Имеется задачка: Написать программу которая будет записывать бинарные данные в файл, а так-же строковые данные типа std::string,...

Использование типизированных и двоичных файлов. - C++
САМО ЗАДАНИЕ: "Выяснить, в каких классах насчитывается более 35 учащихся" К выполнению задания ТРЕБУЕТСЯ: • Все задания выполняются...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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     Чтение/запись двоичных файлов
Еще ссылки по теме:

Ввод/вывод двоичных файлов - C++
Нужно чтоб первый создаваемый файл был двоичным и данные в нем в двоичном режиме Вот мой код #include <iostream> #include <fstream> ...

Переписать код с использованием двоичных файлов - C++
В общем есть у меня программа. Препод сказал переписать с использованием двоичных файлов. Я так понял что это считывание с двоичного файла...

Динамический массив объектов класса и считывание двоичных файлов - C++
Долго бьюсь и не могу понять. В этом варианте он выдает такую ошибку #include <iostream> #include <fstream> #include <cstdlib> ...

Чтение и запись в консоли - C++
Здравствуйте, могли бы вы подсказать как данное сделать? Мне нужно записать в консоль данные (Учитывая что это dll которая будет...


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

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

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