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

перетирание байтов с использованием seekp + write в бинарных файлах - C++

Восстановить пароль Регистрация
 
warloc69
78 / 78 / 4
Регистрация: 28.10.2011
Сообщений: 219
07.09.2013, 17:36     перетирание байтов с использованием seekp + write в бинарных файлах #1
Привет, возник вопрос с записью бинарных файлов.
пишу в файл данные таким кодом :
C++
1
2
3
4
5
6
7
8
9
10
ofstream file1;    
file1.open("file.bin",ios::out|ios::binary|ios::trunc);
    int intVar =156;
    float floatVar  =-34.995;
    long longVar = 10;
    file1.write((char*)&intVar,sizeof(intVar));
    file1.write((char*)&floatVar,sizeof(floatVar));
    file1.seekp(sizeof(int));
    file1.write((char*)&longVar,sizeof(longVar));
file1.close();
читаю из файла таким кодом:
C++
1
2
3
4
5
6
7
8
ifstream file;
file.open("file.bin",ios::in|ios::binary);
    int intVar;
    float floatVar;
    long longVar;
    file.read((char*)&intVar,sizeof(int));
    file.read((char*)&longVar,sizeof(long));
    file.read((char*)&floatVar,sizeof(float));
Ожидаемый результат : после использования все переменный нормально инициализированы согласно порядку записи.

Полученный результат :
1) записали intVar , floatVar
2) с помощью file1.seekp(sizeof(int)); установили курсор на запись в файле после intVar
3) записали longVar
4) floatVar затёрлось longVar.

Вопрос, как использовать file1.write после file1.seekp так что бы дальнейшие данные не затирались а сдвигались?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 17:36     перетирание байтов с использованием seekp + write в бинарных файлах
Посмотрите здесь:

Перегрузка бинарных операций C++
Какие различия у функций seekg и seekp для работы с файлами? C++
C++ Разница между seekg() и seekp()
C++ ios::app не позволяет работать с seekp() или Update файла без удаления в нем информации при его октрытии
методы seekg и seekp C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2769 / 1582 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
07.09.2013, 18:14     перетирание байтов с использованием seekp + write в бинарных файлах #2
Само по себе магически ничего сдвинуться не может. Надо сдвинуть - читай всё до конца файла и пиши после вставленного.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.09.2013, 03:05     перетирание байтов с использованием seekp + write в бинарных файлах #3
Цитата Сообщение от warloc69 Посмотреть сообщение
Вопрос, как использовать file1.write после file1.seekp так что бы дальнейшие данные не затирались а сдвигались?
Никак. Если нужна вставка в файл, сохраняете данные из файла от места вставки до конца файла во временном буфере, перемещаете курсор в позицию вставки, записываете вставляемые данные, записываете содержимое временного буфера.
warloc69
78 / 78 / 4
Регистрация: 28.10.2011
Сообщений: 219
20.09.2013, 16:44  [ТС]     перетирание байтов с использованием seekp + write в бинарных файлах #4
А можно примерчик если не сложно?
Yandex
Объявления
20.09.2013, 16:44     перетирание байтов с использованием seekp + write в бинарных файлах
Ответ Создать тему
Опции темы

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