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

Запись/чтение вектора в/из файла.Структуры - C++

Восстановить пароль Регистрация
 
Nicu
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
06.11.2013, 12:13     Запись/чтение вектора в/из файла.Структуры #1
Доброе время суток.Проблема заключается в следующем: в файл идет запись вектора (запись вроде-бы успешна,насколько я могу судить).После чтения,пытаюсь вывести вектор,но соответственно он не выводится и его размер = 0.
Код:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
struct Knigi
{
    string shifr_knigi; //шифр книги 
    string avtor;       //ФИО автора
    string nazvanie;    //название книги
    string izdatel;     //издательство 
    int god;            //год издания
    //int kol_vo_knig;    //количество данной книги в библиотеке 
};
/*istream& operator >>(istream& ,Knigi&);
ostream& operator <<(ostream& ,Knigi&); тут я пытаюсь вариант №2 чтение/запись,закоментил т.к. запись пашет,чтение нет*/
 
 
/*
istream& operator >>(istream& fout,Knigi &knigi)
{
    fout>>knigi.avtor>>knigi.god>>knigi.izdatel>>knigi.nazvanie>>knigi.shifr_knigi;
    return fout;
 
}
ostream& operator <<(ostream& fin,const Knigi &knigi)
{
    fin<<knigi.avtor<<knigi.god<<knigi.izdatel<<knigi.nazvanie<<knigi.shifr_knigi;
    return fin;
}*/
 
//Вот функции с помощью которых пишу и считываю вектор
void WFile(ofstream& fobj,Knigi& knigi)
{
    fobj.write((char*)&knigi,sizeof(knigi));
}
void RFile(ifstream& fobj,Knigi& knigi)
{
    fobj.read((char*)&knigi,sizeof(knigi));
}
 
 
//вот кусок функции, в которой идет запись
case '2': //создание файла книги
                                  { 
                                   k_k=0;
                                   do 
                                     {
                                      cout<<"\nВвод новой записи\n";
                                      cout<<"Введите шифр книги\n";
                                      cin>>tmp.shifr_knigi;
                                      cout<<"Введите ФИО автора\n";
                                      cin>>tmp.avtor;
                                      cout<<"Введите название книги\n";
                                      cin>>tmp.nazvanie;
                                      cout<<"Введите издательство книги\n";
                                      cin>>tmp.izdatel;
                                      cout<<"Введите год издания книги\n";
                                      cin>>tmp.god;
                                      masKnigi.push_back(tmp);// добавление элементов
                                      cout<<"В файле БД 'Книги' находится->"<<masKnigi.size()<<" книга(и)\n";
                                      cout<<"\n \n \n";
                                      cout<<"code->"<<masKnigi[k_k].shifr_knigi<<"\n";
                                      cout<<"aithor->"<<masKnigi[k_k].avtor<<"\n";
                                      cout<<"name->"<<masKnigi[k_k].nazvanie<<"\n";
                                      cout<<"izd->"<<masKnigi[k_k].izdatel<<"\n";
                                      cout<<"year->"<<masKnigi[k_k].god<<"\n";
                                      k_k++;
                                      cout<<"Хотите ввести еще одну запись? ( y-да/n-нет )?  ";
                                      cin>>otv;
                                      cout<<"\n \n \n";
                                      
                                      }
                                   while(otv=='y');
                                   cin.get();
                                   ofstream foutKnigi("Knigi.dat",ios::out|ios::binary|ios::trunc);
                                                                   //запись вектора в файл
                                   //std::copy(masKnigi.begin(), masKnigi.end(), std::ostream_iterator<Knigi>(foutKnigi, "\n")); попытка записи с помощью итератора
                                    for(int i=0;i<masKnigi.size();i++)
                                    {
                                        WFile(foutKnigi,masKnigi[i]);
 
                                    }
                                    foutKnigi.close();
                                    masKnigi.clear();//этим чистим вектор от значений
                                    cout<<masKnigi.size()<<"\ нажмите return";//тут я визуально проверяю что там в векторе осталось, можно будет удалить                                    
                                    
                                   }
//кусок функции с помощью которого считываем 
case '2': 
                               {
                                    
                                        ifstream finKnigi("Knigi.dat",ios::in|ios::binary);
                                        if(!finKnigi)
                                        {
                                            cout<<"Файл данных Книги пуст!\n";
                                            
                                        }
                                        for (int i=0;i<1;i++)
                                        {
                                            RFile(finKnigi,masKnigi[i]);
                                        }
                                        /*
                                        std::copy(std::istream_iterator<Knigi>(finKnigi), std::istream_iterator<Knigi>(), std::back_inserter(masKnigi)); маялся с итератором
                                        finKnigi.close();
                                        std::copy(masKnigi.begin(),masKnigi.end(),ostream_iterator<Knigi>(cout," "));
пытался вывести вектор таким способом*/
                                        
                                        
                                        for(int i=0;i<masKnigi.size();i++)
                                                {
                                                    cout<<"Mas["<<i<<"] ="<<masKnigi[i]<<"\n";// 1 способ вывода
                                                    
                                                }
                                        
 
                                        
 
                                        cout<<masKnigi.size();
                                        
                                   
                                 if(k_k==0)
                                     cout<<"Файл данных Книги пуст!";
                                 else
                                 {
                                 system("cls");
                                 //вывод таблицы книги
                                 system("cls");
                                 }*/
                                 break;
                                }
Прошу совета как сделать нормально чтение или чтение/запись или объяснение в чем я не прав когда пишу такой как есть сейчас код.
За плохие названия переменных/функций/структур и прочего знаю,но мопед не мой как говорится
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 12:13     Запись/чтение вектора в/из файла.Структуры
Посмотрите здесь:

Чтение структуры из файла и запись нового C++
Запись и чтение вектора из файла C++
Ansi c, запись и чтение структуры из файла. Накосячил от души C++
C++ Запись и чтение структуры с файла
C++ Запись структуры и её чтение из файла
Запись структуры и чтение из файла в структуру ( как бы лучше ) C++
Чтение/запись структуры C++
Запись и чтение структуры в/из файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nicu
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
06.12.2013, 18:51  [ТС]     Запись/чтение вектора в/из файла.Структуры #2
Админу.Удалите тему
Yandex
Объявления
06.12.2013, 18:51     Запись/чтение вектора в/из файла.Структуры
Ответ Создать тему
Опции темы

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