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

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

Войти
Регистрация
Восстановить пароль
 
Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
#1

Как записывать и считывать не POD типы данных из бинарного файла? - C++

03.06.2012, 22:02. Просмотров 707. Ответов 3
Метки нет (Все метки)

Есть класса в котором часть полей не базовых динамических типов например vector list и подобные.
Как записать экземпляр класса в бинарный файл чтобы потом его нормально считать?
Через boost serialization? Или есть другие варианты?
Если делать через fwrite\fread считываются только поля базового типа.

Добавлено через 10 часов 24 минуты
Пример проблеммы
C++
1
2
3
4
5
6
7
8
9
10
class A
{
 int val;
}
 
class B
{
 string name;
 vector<A> v;
}
В данном случае нужно записать класс B

Добавлено через 11 часов 8 минут
Такой вариант для записи вектора работает но можно ли сделать как нибудь проще?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class A
{
    int val;
public:
    void write(ostream& f) const
    {
        f.write((char*)&val, sizeof(int));
    }
};
 
class B
{
    string name;
    vector<A> v;
public:
    void write()
    {
        ofstream f("dump.bin", ios_base::binary);
        size_t name_size = name.size();
        f.write((char*)&name_size, sizeof(size_t));
        for (int i = 0; i != name.size(); ++i)
        {
            f.write((char*)&name[i], sizeof(char));
        }
        size_t vec_size = v.size();
        f.write((char*)&vec_size, sizeof(size_t));
        for (int i = 0; i != v.size(); ++i)
        {
            v[i].write(f);
        }
    }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 22:02     Как записывать и считывать не POD типы данных из бинарного файла?
Посмотрите здесь:
Как записывать и читать с БИНАРНОГО файла C++
Fstream не может и записывать в файл, и считывать из него? C++
Сведения о машине можно считывать/записывать в файл C++
C++ Как сделать сохранение/загрузку данных из бинарного файла через классы?
Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си? C++
C++ Чтение данных из бинарного файла
C++ Чтение данных из бинарного файла
Считывание данных из бинарного файла C++
Как считывать матрицу из файла? C++
Как считывать данные из файла? C++
Вывод на экран данных их бинарного файла C++
Трабл с считыванием данных из бинарного файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.06.2012, 22:28     Как записывать и считывать не POD типы данных из бинарного файла? #2
Для вектора гарантируется размещение элементов в памяти как у массива.
Поэтому можно попробовать вариант записи одним оператором write всего вектора сразу.

Для string'a же гарантии непрерывного размещения нет, поэтому только поэлементно.
Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
04.06.2012, 15:30  [ТС]     Как записывать и считывать не POD типы данных из бинарного файла? #3
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Для вектора гарантируется размещение элементов в памяти как у массива.
Поэтому можно попробовать вариант записи одним оператором write всего вектора сразу.
Ну запишется он нормально да. Но при чтении новый вектор будет иметь не тот размер и его надо будет отдельно считывать и устанавливать или поэлементно читать.
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
04.06.2012, 18:15     Как записывать и считывать не POD типы данных из бинарного файла? #4
Цитата Сообщение от Derpy Посмотреть сообщение
Ну запишется он нормально да. Но при чтении новый вектор будет иметь не тот размер и его надо будет отдельно считывать и устанавливать или поэлементно читать.
Совершенно верно.
Поэтому с каждым новым классом в принципе нужно писать методы сериализации и десериализации.
На диске для контейнеров обычно требуется сохранять не только саму информацию, но и обычно некие дополнительные данные вроде размера (количество элементов), и типа элементов. Тогда и можно пооптимизировать ввод-вывод конкретно для данного класса.
Yandex
Объявления
04.06.2012, 18:15     Как записывать и считывать не POD типы данных из бинарного файла?
Ответ Создать тему
Опции темы

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