Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
1

Записать\прочесть данные в\из бинарного файла в инкапсулированну структуру

27.04.2015, 13:31. Показов 1241. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте форумчане.
Как записать\прочесть данные в\из бинарного файла в инкапсулированну структуру такого вида?

C++
1
2
3
4
5
6
7
8
9
10
11
12
struct obj
{
public:
const int& get_a() const { return a_; }
const int& array(const int& i) const { return array_.at(i); }
 
void set_a(const int& d) { a_ = d;}
void push_array(const int& d) { array_.push_back(d); }
private:
int a_;
std::vector<int> array_;
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2015, 13:31
Ответы с готовыми решениями:

Прочесть структуру из файла, модифицировать и записать обратно в файл
Составить структуру в файле на языке си . читаешь структуру из файла, меняешь значения структуры...

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

Из файла записать данные в структуру данных
Скажите пожалуйста, как можно из файла записать данные в структуру данных? Я пробую fread, он не...

Как записать в структуру данные из файла?
имеется структура struct ceh { char plan; long int num_mis; long int vipusk; } Как...

8
Заблокирован
27.04.2015, 13:38 2
Ну а чё там сложного - то? У тебя ж данные только в векторе int-ов лежат. Пишешь в файл кол-во интов, а потом циклом сами инты из вектора. Делов то ...
0
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.04.2015, 13:46  [ТС] 3
Lost_Eden, данные лежат в а_ и array_. Нужно записать и считать данные в бинарный файл подобно
C++
1
2
file.read ( static_cast<char*>(obj), sizeof(obj) );
file.write ( static_cast<char*>(obj), sizeof(obj) );
Добавлено через 2 минуты
Lost_Eden, представьте, что у меня в векторе может быть другой объект, например изображение.
0
Заблокирован
27.04.2015, 14:04 4
Лучший ответ Сообщение было отмечено QVO как решение

Решение

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
int a_;
    std::vector<int> array_;
    
    //Serialize
    std::fstream fs("out.bin", std::ios::out | std::ios::binary);
    if(fs.is_open())
    {
        fs << a_;
        fs << array_.size();
        for(int i = 0; i < array_.size(); i++)
            fs << array_[i];
        
        fs.close();
    }
    
    //Deserialize
    std::fstream fs("out.bin", std::ios::in | std::ios::binary);
    if(fs.is_open())
    {
        fs >> a_;
        int arraySize = 0;
        fs >> arraySize;
        array_.reserve(arraySize);
        for(int i = 0; i < arraySize; i++)
        {
            int tmp;
            fs >> tmp;
            array_.push_back(tmp);
        }
        
        fs.close();
    }
0
9 / 9 / 13
Регистрация: 25.10.2014
Сообщений: 52
27.04.2015, 14:11 5
Лучший ответ Сообщение было отмечено QVO как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<class N> std::ostream& operator<<(std::ostream& os, std::vector<N>& n)
{
    for(unsigned int i = 0; i < n.size(); i++)
        os << n[i] << '\t';
    os << std::endl;
    return os;
}
 
template<class M> std::istream& operator>>(std::istream& os, std::vector<M>& m)
{
    M temp;
    os >> temp;
    m.push_back(temp);
    return os;
}
int main()
{
 
    std::vector<int> vi(10, 777);
    std::cin >> vi;
 
    std::cout << vi;
}
Вместо std::cin - ваш поток из файла, а вместо std::cout ваш поток в файл.
0
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.04.2015, 14:17  [ТС] 6
Lost_Eden, подскажите пожалуйста, это будет работать, если я структуру obj помещу в вектор другой структуры и напишу для нее подобную функцию сохранения в файл?

C++
1
2
3
4
5
6
7
8
9
struct obj2
{
void save()
{
//...
}
private:
std::vector<obj> object_;
};
Добавлено через 4 минуты
Aleks_Tret, спасибо за Ваш ответ, но проблема заключается в записи структуры в файл, в том числе структуры содержащую вектор из другой структуры.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct obj1
{
int a, b, c;
vector<int> v;
};
 
struct obj2
{
int i;
vector<obj1> obj;
 
void save()
{
//...
}
 
void read
{
//...
}
};
0
9 / 9 / 13
Регистрация: 25.10.2014
Сообщений: 52
27.04.2015, 14:31 7
Цитата Сообщение от QVO Посмотреть сообщение
Aleks_Tret, спасибо за Ваш ответ, но проблема заключается в записи структуры в файл, в том числе структуры содержащую вектор из другой структуры
Эти шаблонки можно применить и к такому случаю:
C++
1
2
3
4
5
6
7
int main()
{
    std::vector<std::vector<std::string>> vvs;
    std::cin >> vvs;
 
    std::cout << vvs;
}
0
Заблокирован
27.04.2015, 14:44 8
Цитата Сообщение от QVO Посмотреть сообщение
подскажите пожалуйста, это будет работать, если я структуру obj помещу в вектор другой структуры и напишу для нее подобную функцию сохранения в файл?
Понимаешь, как бы операторами << >> можно загонять в файловый поток простые данные или же типа данных, для который определены эти оператора.
В вектор можно засунуть что угодно, только это что угодно должно уметь сериализоваться и десериализоваться как бы...
Короче ты сам должен следить за правильностью сохранения данных в файл.
0
9 / 9 / 13
Регистрация: 25.10.2014
Сообщений: 52
27.04.2015, 14:49 9
Кликните здесь для просмотра всего текста
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
template<class N> std::ostream& operator<<(std::ostream& os, std::vector<N>& n)
{
    for(unsigned int i = 0; i < n.size(); i++)
        os << n[i] << '\t';
    os << std::endl;
    return os;
}
 
template<class M> std::istream& operator>>(std::istream& os, std::vector<M>& m)
{
    M temp;
    os >> temp;
    m.push_back(temp);
    return os;
}
 
struct Object_1
{
    int a, b, c;
    std::vector<int> v;
};
 
struct Object_2
{
    int i;
    std::vector<Object_1> obj;
};
 
std::ostream& operator<<(std::ostream& os, Object_1& in)
{
    os << in.a << '\t' << in.b << '\t' << in.c << std::endl;
    os << in.v;
    return os;
 
}
 
std::ostream& operator<<(std::ostream& os, Object_2& in)
{
    os << in.i << std::endl;
    os << in.obj;
    return os;
}
int main()
{   Object_1 obj1;
    obj1.a = 1;
    obj1.b = 2;
    obj1.c = 3;
    obj1.v.push_back(111111);
 
    Object_2 obj2;
    obj2.i = 4;
    obj2.obj.push_back(obj1);
 
    std::cout << "Object_1 " << obj1 << std::endl;
    std::cout << "Object_2 " << obj2;
    
}


Можно так же написать и операторы извлечения из потока.
0
27.04.2015, 14:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2015, 14:49
Помогаю со студенческими работами здесь

Не получается считать из текстового файла данные о студентах и записать в структуру
Мне нужно написать программу которая на основе данных о студентах что-то считывает и выполняет....

Прочесть данные из файла
Нашел в интернете код для открытия файла: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Прочесть данные матрицы из файла.
Не могли бы вы помочь хотя бы начать программку,которая читает данные матрицы из файла(в одной...

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

Прочесть данные из XML-файла
Подскажите пожалуйста, есть xml файл: &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; -&lt;config&gt; ...

Прочесть и записать содержимое xml файла в переменную String
Нужно записать все содержимое файла some.xml в переменную private static final String some_strings...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru