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

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

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

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

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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2015, 13:31
Ответы с готовыми решениями:

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

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

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

8
Заблокирован
27.04.2015, 13:38
Ну а чё там сложного - то? У тебя ж данные только в векторе int-ов лежат. Пишешь в файл кол-во интов, а потом циклом сами инты из вектора. Делов то ...
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.04.2015, 13:46  [ТС]
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
Лучший ответ Сообщение было отмечено 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
Лучший ответ Сообщение было отмечено 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
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
27.04.2015, 14:17  [ТС]
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
Цитата Сообщение от 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
Цитата Сообщение от QVO Посмотреть сообщение
подскажите пожалуйста, это будет работать, если я структуру obj помещу в вектор другой структуры и напишу для нее подобную функцию сохранения в файл?
Понимаешь, как бы операторами << >> можно загонять в файловый поток простые данные или же типа данных, для который определены эти оператора.
В вектор можно засунуть что угодно, только это что угодно должно уметь сериализоваться и десериализоваться как бы...
Короче ты сам должен следить за правильностью сохранения данных в файл.
0
9 / 9 / 13
Регистрация: 25.10.2014
Сообщений: 52
27.04.2015, 14:49
Кликните здесь для просмотра всего текста
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2015, 14:49
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru