Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

25.11.2009, 12:31. Просмотров 1999. Ответов 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. правильно ли это? ибо если какието данные исходного файла могут кодироваться нулями надо этот способ не подойдет
заранее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2009, 12:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение/запись двоичных файлов (C++):

Запись и чтение двоичных файлов - C++
Здравствуйте! Как производится запись в двоичные файлы? Нормальных гайдов я не нагуглил. Пробовал так, но не получается.fstream...

чтение двоичных файлов - C++
Здравствуйте. Помогите, пожалуйста, разобраться с кодом. я могу считать числа из строки с помощью getline и strtod. но сейчас возникла...

чтение/запись файлов - C++
Здравствуйте, подскажите, пожалуйста, как решить проблему: Имеется массив типа BYTE, необходимо записать его КАК файл Microsoft Word,а...

Запись и чтение файлов - C++
Есть задача, имеются бинарные файл А и В, в А первые 10 чисел положительные, другие 10 отрицательные. Записать в В первые 5 положительных и...

Чтение\запись файлов - C++
Помогите с такой проблемой: записываю в бинарный файл числа типа long double, после чтения из файла теряются данные - к примеру вместо 12...

Запись, чтение, удаление из файлов - C++
Добрый день! Решаю задачку: 1) Нужно записать в файл - моя программа записывает в .dat файл вводимую структуру. Но можно ли это...

11
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 14:37 #2
Слишком много букав.
Сформулируй вопросы(если имеются).
0
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] остались незаполненными?
0
niXman
Эксперт С++
3139 / 1451 / 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, то вернет кол-во прочитанных байт. Все
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
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...), пишете в выходной файл столько,сколько прочиталось (конечно, если входной файл просто кончился), проверяете, сколько записалось, и, если опять не сошлось - выдаёте сообщение об ошибке записи
1
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
25.11.2009, 15:39  [ТС] #6
ох,точно, fread же еще и возвращает целое значение )
спасибо!
а по поводу первого, вопрос именно в том, не изменятся ли данные при копировании файлов если мы копируем "через" вот этот целочисленный массив А ? тоесть массив А в качестве буфера
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,849
25.11.2009, 15:41 #7
Цитата Сообщение от nickson91 Посмотреть сообщение
а по поводу первого, вопрос именно в том, не изменятся ли данные при копировании файлов если мы копируем "через" вот этот целочисленный массив А ?
Копируйте через массив char[] и ни о чём плохом не думайте
0
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 15:41 #8
По поводу первого - нет.
1
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
25.11.2009, 15:50  [ТС] #9
последний дурацкий вопрос, чтобы посмотреть сколько прочиталось элементов размера size, мы присваиваем какойто переменной значение fread (.....) . Надо ли вызывать еще раз функцию fread чтобы собственно перенести элементы в буфер или все делается в одной строчке:
X=fread (....) ?
0
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 15:51 #10
Цитата Сообщение от nickson91 Посмотреть сообщение
чтобы посмотреть сколько прочиталось элементов размера size, мы присваиваем какойто переменной значение fread (.....)
Да.

Цитата Сообщение от nickson91 Посмотреть сообщение
или все делается в одной строчке
В одной.
0
nickson91
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 15
25.11.2009, 15:52  [ТС] #11
большое Вам спасибо
0
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.11.2009, 15:52 #12
успехов.
0
25.11.2009, 15:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2009, 15:52
Привет! Вот еще темы с ответами:

Быстрое чтение и запись файлов - C++
Вопрос такой: имеется файл input.txt следующего вида: 5 12 6 7 44 2 1 2 3 4 5 2 343 634 54 1 123 2 345 56 56 11111 2222...

Чтение из двух файлов и запись в третий - C++
Имеется следующая задача: в цикле подсчитывается определенное значение функции fe, зависящее от одного параметра(вводится) и записывается в...

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

Чтение из двух файлов и запись в один - C++
Помогите с одной задачей. У меня есть два файла: 1. "oldmast.dat" в котором 4 поля: номер счета клиента, фимилия, имя и баланс; 2....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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