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

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

Войти
Регистрация
Восстановить пароль
 
eagl69
4 / 9 / 1
Регистрация: 12.10.2011
Сообщений: 498
#1

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

29.01.2016, 09:17. Просмотров 589. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Вот небольшая прога которая пишет в вектор структуру... при повторном запуске она читает с файла в вектор и по идее можно еще добавлять записи.. но при повторном запуске если попытаться добавить не работает.
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
#include "stdafx.h"
struct Administrator
{
    std::string login_admin;
    std::string pass_admin;
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::fstream file;//создание файла и запись его
    char komanda;
    int kol_adminov = 0;
 
    //считывание данных по администраторам при первом включении если их нет то запрашиваем ввод
    file.open("avtoriz_admin_kol.ser", std::ios_base::in | std::ios_base::binary);
    if ( file.is_open() )//проверка существует файл или нет
    {
        file >> kol_adminov;
        std::cout << "kol_adminov - " << kol_adminov << '\n';
        file.close();
    }
    else
    {
        std::cout << "В базе нет записей админов введите их " << '\n';
    }
    //создание массива структур админов
    std::vector<Administrator> baza_admin(kol_adminov);
    Administrator adm;//создание временной структуры ввода
    std::cout << "vector<Administrator> baza_admin(kol_adminov) создана кол элементов - " << kol_adminov << '\n';
 
    //открываем файл с базой админов
    file.open("avtoriz_admin.ser", std::ios_base::in | std::ios_base::binary);
    if ( file.is_open() )//проверка существует файл или нет
    {
        for ( int aa = 0; aa < kol_adminov; ++aa )//чтение файла в вектор
        {
            file.read((char*)&baza_admin[aa], sizeof(baza_admin[aa]));
            std::cout << "baza_admin[0].login_admin - " << aa << baza_admin[aa].login_admin << '\n';
            std::cout << "baza_admin[0].pass_admin - " << baza_admin[aa].pass_admin << '\n';
        }
        file.close();
    }
    do//бесконечный цикл ожидания ввода админов
    {
        std::cout << "Введите команду" << std::endl;
        std::cin >> komanda;
        switch ( komanda )
        {
        case 'l':
        {
            int a = baza_admin.size();//узнаем количество элементов в векторе
            std::cout << "Введите логин администратора a = " << a << "  " << adm.login_admin << '\n';
            std::cin >> adm.login_admin;//чтение с клавы в структуру ввода
            std::cout << "Введите пароль администратора a = " << a << '\n';
            std::cin >> adm.pass_admin;//чтение с клавы в структуру ввода
 
            baza_admin.push_back(adm);//добавление в конец вектора структуры
/*вот на этом виснет при повторном запуске... при первом можно создавать несколько элементов*/
 
            file.open("avtoriz_admin.ser", std::ios_base::out | std::ios_base::binary | std::ios_base::app); //открытие файла для записи 
            if ( file.is_open() )//проверка существует файл или нет
            {
                file.write(reinterpret_cast<const char*>(&baza_admin[a]), sizeof baza_admin[a]);//запись вектора в файл
                std::cout << "baza_admin[0].login_admin - " << baza_admin[a].login_admin << '\n';
                std::cout << "baza_admin[a].pass_admin - " << baza_admin[a].pass_admin << '\n';
                file.close();
            }
            else
            {
                std::cout << "файл с логином админа не записан - " << '\n';
            }
            file.open("avtoriz_admin_kol.ser", std::ios_base::out | std::ios_base::binary); //открытие файла для записи 
            if ( file.is_open() )//проверка существует файл или нет
            {
                file << ++a;
                file.close();
            }
            break;
        }
        break;
        }
    }
    while ( true );
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2016, 09:17     Запись и чтение вектора из файла
Посмотрите здесь:

Запись и чтение вектора из файла - C++
Здравствуйте! Помогите понять ошибку. Создаю группу, записываю ее в файл (первым в файл записывается непонятный символ). Первый запуск...

Запись/чтение вектора в/из файла.Структуры - C++
Доброе время суток.Проблема заключается в следующем: в файл идет запись вектора (запись вроде-бы успешна,насколько я могу судить).После...

Запись вектора uin8_t в бинарный файл и обратное чтение из файла - C++
Здравствуйте. Есть std::vector&lt;uint8_t&gt;. Нужно записать все элементы в бинарный файл, а затем считать обратно из файла в...

Чтение вектора структур из файла - C++
struct TRANSACTIONS { unsigned long long sender; unsigned long long receiver; unsigned long long amount; } ... ...

Вектора и чтение из файла и обратно (File IO) - C++
Ребят! Помогите как сможете! Я никак не могу связать перечисления между собой( И еще никак не могу сделать так, чтобы каждый раз, когда...

Запись и чтение из файла - C++
Доброго время суток! Так от балди решыл набросать прогу которая создаёт файл записывает туда 11 рандомных чисел,потом з помощю ifstream я...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nd2
2136 / 1708 / 601
Регистрация: 29.01.2016
Сообщений: 5,502
29.01.2016, 16:49     Запись и чтение вектора из файла #2
Не используй тут бинарные методы записи\чтения для объектов: vector и string для этого не годятся. Пишешь память под объектами, а сами данные могут храниться совсем в другом месте.
eagl69
4 / 9 / 1
Регистрация: 12.10.2011
Сообщений: 498
29.01.2016, 16:52  [ТС]     Запись и чтение вектора из файла #3
так затык то не в записи а в добавлении в вектор данных... вот здесь
C++
1
 baza_admin.push_back(adm);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2016, 17:09     Запись и чтение вектора из файла
Еще ссылки по теме:

Чтение и запись из файла - C++
Пользуюсь code::blocks. Перерыл весь гугл, так и не понял, как что-то читать или записыват в файл при помощи библиотеки &lt;fstream&gt;. Можете...

Си, Запись и Чтение из файла. - C++
Глупый вопрос, но весь гугл перерыл. Нужно сделать именно на СИ(не на с++) чтение и запись в файл .txt . С использованием библиотеки...

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

Запись и чтение из файла - C++
Всем добрый вечер, как можно записать данные в файл? Например записать в txt файл список паролей. На одном сайте нашел информацию по...

Чтение из файла и запись - C++
Доброго времени суток. Передо мной стоит следующая задача - имеется файл и строк слов такого типа: АААА ББББ ВВВВВ АААА ПППП АААА...

Запись и чтение из файла - C++
Здравствуйте не могли бы мне помочь разобраться, что не так. Есть две программы, одна для записи в файл “Writer.exe” а для чтения...


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

Или воспользуйтесь поиском по форуму:
nd2
2136 / 1708 / 601
Регистрация: 29.01.2016
Сообщений: 5,502
29.01.2016, 17:09     Запись и чтение вектора из файла #4
Цитата Сообщение от eagl69 Посмотреть сообщение
так затык то не в записи а в добавлении в вектор данных... вот здесь
Затык может быть и там, и там. Я твой код не изучал. Посмотри, как string может быть устроена, и подумай, что ты пишешь в файл, и что оттуда читаешь.
http://cpp.com.ru/meyers/ch2.html
То же и вектора касается.

Добавлено через 5 минут
Почитай похожую тему: Запись и чтение структуры с файла
Yandex
Объявления
29.01.2016, 17:09     Запись и чтение вектора из файла
Ответ Создать тему
Опции темы

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