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

Запись объектов в файл и чтение - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.76
iFree
2 / 2 / 0
Регистрация: 11.10.2010
Сообщений: 35
22.02.2011, 01:23     Запись объектов в файл и чтение #1
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
#include <fstream.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
 
class my {
int a;
float b;
char c[30];
 
public:
void create()    
{ cout<<"Input a = "; cin>>a; cin.ignore();
cout<<"input b = "; cin>>b; cin.ignore();
cout<<"Input c = "; cin.getline(c,30);
cout<<this<<" created";
}
void show()
{cout<<"a = "<<a<<endl<<"b = "<<b<<endl<<"c = "<<c; getch();}
 
};
 
void main()
{ clrscr();
my obj,obj1;
ofstream  myclass("myfile.txt",ios::binary);
do { cout<<"1. Create obj\n2. Save obj\n3. Open obg\n4. Show obj\n";
switch(getche()) {
            case '1': {obj.create();} break;
         case '2': {myclass.write(reinterpret_cast<char*>(&obj),sizeof(obj));} break;
         case '3': {ifstream my("myfile.txt",ios::binary);  my.read(reinterpret_cast<char*>(&obj1),sizeof(obj1));} break;
         case '4': {obj1.show();} break;
}
}while(255);
getch();
}
Пользовался литературой Лафоре. В итоге файл создается, но он пустой. Ну соответственно я уже молчу о его "считывании".
Или может я не правильно рою?

Мне нужно научиться записывать объекты (ну и массив объектов) в файл. И читать их оттуда. при чем если я массив записал, то соответственно - массив объектов я хочу и восстановить из файла.
Как это удобнее реализовать?
Я нашел путь только через потоки ввода вывода файлов, но не пойму что здесь не так. Может есть еще функция закрытия файла или почему файл все равно пустой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.02.2011, 05:02     Запись объектов в файл и чтение #2
Цитата Сообщение от iFree
В итоге файл создается, но он пустой.
нужно заполнить структуру, выбрав 1
если надо, вывести её после заполнения на экран
а полноту/пустоту файла определять в hex-viewer'е

Цитата Сообщение от iFree
Может есть еще функция закрытия файла
она есть, но также есть вроде деструктор, который закрывает файл при разрушении объекта
iFree
2 / 2 / 0
Регистрация: 11.10.2010
Сообщений: 35
22.02.2011, 10:53  [ТС]     Запись объектов в файл и чтение #3
Может предложите другой способ записи объектов файл? не через потоки?
я просто новичок в С++, здесь это немного иначе, нахватался литературы на быструю руку.

Может быть средствами stdio.h ?
Ну мне нужно бы именно массив загонять.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
22.02.2011, 11:43     Запись объектов в файл и чтение #4
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
#include <iostream>
#include <fstream>
 
class my {
    int a;
    float b;
    char c[30];
    public:
    friend std::ostream& operator<<(std::ostream& o, my& x){
        std::cout<<"a= "<<x.a<<", b= "<<x.b<<", c= "<<x.c;
    }
    void create(){
        std::cout<<"a = "; std::cin>>a;
        std::cout<<"b = "; std::cin>>b; std::cin.ignore();
        std::cout<<"c = "; std::cin.getline(c, 30);
        std::cout<<*this<<" created\n";
    }
};
 
int main (){
    my o, o1;
    o.create();
    std::ofstream ofs("text.txt", std::ios::binary);
    ofs.write(reinterpret_cast<char*>(&o), sizeof(o));
    ofs.close();
    std::ifstream ifs("text.txt", std::ios::binary);
    if(!ifs){std::cerr<<"File not found"; return 1;}
    ifs.read(reinterpret_cast<char*>(&o1), sizeof(o1));
    ifs.close();
    std::cout<<"o1: "<<o1<<"\n";
}
Yandex
Объявления
22.02.2011, 11:43     Запись объектов в файл и чтение
Ответ Создать тему
Опции темы

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