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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
#1

Чтение из бинарного файла - C++

22.12.2013, 18:14. Просмотров 1115. Ответов 7
Метки нет (Все метки)

Здравствуйте. У меня имеется некий класс Product, объекты которого хранятся в объекте класса Vector. Есть функция записи вектора в бинарный файл. Как мне теперь считать данные из этого файла в вектор?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Product {
    std::string name_;
    long kol_;
    std::string mesto_;
    float price_;
    std::string postav_;
public:
    ...
};
 
void Database::save(string file) {
        FILE* fout;
        const char* name = file.c_str();
        if (( fout = fopen(name, "wb")) == NULL ) {
                // нет файла
                return;
        }
        vector<Product>::iterator i = database_.begin();
        for (i; i != database_.end(); ++i) {
                fwrite(i, sizeof(i), 1, fout);
        }
        fclose(fout);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2013, 18:14     Чтение из бинарного файла
Посмотрите здесь:

Чтение из бинарного файла значений - C++
Доброго времени суток. Есть бинарный файл. Можно из него как-нибудь считать значения по адресам? 0x77, 0x1E, 0xEB, 0x4E Просто не...

Чтение/запись бинарного файла - C++
Надо проверить корректно ли работает стек. #include &quot;stack.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; ...

Чтение данных из бинарного файла - C++
читаю по while (!stream.eof()), проблема в том что в конце в условие лишний раз заходит, и пытается считать данные, хотя уже файл кончился,...

неправильное чтение бинарного файла. - C++
программа должна по идее вывести 99.. мне так казалось.. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; using...

Чтение бинарного кода из файла - C++
Необходимо прочитать бинарный код, синтаксически разделённый на байты (Например: 01000010 00011100 01111011) из файла. С библиотекой...

Чтение и запись бинарного файла - C++
Добрый день! Есть задача прочитать с бинарного файла информацию, обработать ее и записать результат в бинарный файл. #include &quot;stdafx.h&quot;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lpvoid
322 / 305 / 17
Регистрация: 06.03.2013
Сообщений: 869
22.12.2013, 18:18     Чтение из бинарного файла #2
Oberyn Martell, в каком формате записывали - в таком и считывайте. вам же виднее, вы писали. напишите подобие двоичного сериализатора.
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
22.12.2013, 18:32  [ТС]     Чтение из бинарного файла #3
lpvoid, то есть написать просто что-то наподобие этого не получится? :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Database::zagruz(string file) {
        FILE* fout;
        const char* name = file.c_str();
        Product a;
        if (( fout = fopen(name, "r+b")) == NULL ) {
                // нет файла
                return;
        }
        vector<Product>::iterator i = database_.begin();
        database_.erase(database_.begin(), database_.end());
        while(!feof(fout)) {
                fread(&a, sizeof(a), 1, fout);
                database_.push_back(a);
        }
        fclose(fout);
}
lpvoid
322 / 305 / 17
Регистрация: 06.03.2013
Сообщений: 869
22.12.2013, 18:33     Чтение из бинарного файла #4
Oberyn Martell, as far as I know, нет.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.12.2013, 19:54     Чтение из бинарного файла #5
Oberyn Martell, у вас string в полях, поэтому бинарное чтение\запись, без дополнительных ухищрений (сериализация), не получится: Запись объектов в файл
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
23.12.2013, 09:21  [ТС]     Чтение из бинарного файла #6
Попробовал реализовать вот так вот, но значения считываются неправильно:
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
void Database::save(string file) {
        FILE* fout;
        file = file + ".bin";
        const char* name = file.c_str();
        if (( fout = fopen(name, "wb")) == NULL ) {
                // нет файла
                return;
        }
 
        int count;
        vector<Product>::iterator i = database_.begin();
        for(i; i != database_.end(); ++i) {
                count++;
        }
 
        fwrite(&count, sizeof(int), 1, fout);
        for(i = database_.begin(); i != database_.end(); ++i) {
                int
                        sizeName = i->getNameSize(),
                        sizeKol = i->getKolSize(),
                        sizeMesto = i->getMestoSize(),
                        sizePrice = i->getPriceSize(),
                        sizePostav = i->getPostavSize();
 
                fwrite(&sizeName, sizeof(int), 1, fout);
                fwrite(&sizeKol, sizeof(int), 1, fout);
                fwrite(&sizeMesto, sizeof(int), 1, fout);
                fwrite(&sizePrice, sizeof(int), 1, fout);
                fwrite(&sizePostav, sizeof(int), 1, fout);
 
                long kol = i->getKol();
                float price = i->getPrice();
 
                fwrite(&kol, sizeKol, 1, fout);
                fwrite(&price, sizePrice, 1, fout);
 
                char buf [1];
 
                strcpy(buf, i->getName().c_str());
                fwrite(&buf, sizeName, 1, fout);
 
                strcpy(buf, i->getMesto().c_str());
                fwrite(&buf, sizeMesto, 1, fout);
 
                strcpy(buf, i->getPostav().c_str());
                fwrite(&buf, sizePostav, 1, fout);
        }
        fclose (fout);
}
 
void Database::zagruz(string file) {
        int count = 0;
        long kol;
        float price;
        string name, mesto, postav;
        FILE* fout;
        file = file + ".bin";
        const char* nameFile = file.c_str();
        Product a;
        if (( fout = fopen(nameFile, "rb")) == NULL ) {
                // нет файла
                return;
        }
        fread(&count, sizeof(int), 1, fout);
        for(int i = 0; i < count; i++) {
                int
                        sizeName = 0,
                        sizeKol = 0,
                        sizeMesto = 0,
                        sizePrice = 0,
                        sizePostav = 0;
 
                fread(&sizeName, sizeof(int), 1, fout);
                fread(&sizeKol, sizeof(int), 1, fout);
                fread(&sizeMesto, sizeof(int), 1, fout);
                fread(&sizeMesto, sizeof(int), 1, fout);
                fread(&sizePrice, sizeof(int), 1, fout);
                fread(&sizePostav, sizeof(int), 1, fout);
 
                fread(&kol, sizeKol, 1, fout);
                fread(&price, sizePrice, 1, fout);
 
                char buf[1];
 
                fread(&buf, sizeName, 1, fout);
                name = buf;
 
                fread(&buf, sizeMesto, 1, fout);
                mesto = buf;
 
                fread(&buf, sizePostav, 1, fout);
                postav = buf;
 
                dobavProduct(name, kol, price, postav);
        }
        fclose(fout);
 
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.12.2013, 17:47     Чтение из бинарного файла #7
Цитата Сообщение от Oberyn Martell Посмотреть сообщение
char buf [1];
Вы в этот массив строки копируете?
Цитата Сообщение от Oberyn Martell Посмотреть сообщение
strcpy(buf, i->getName().c_str());
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2013, 19:13     Чтение из бинарного файла
Еще ссылки по теме:

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

Чтение структуры из бинарного файла - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; int main(void) { setlocale (0,&quot;&quot;); ...

Написание и чтение бинарного файла в С++ - C++
У меня возникла проблема, которую решить не могу. Вбиваю целое число N и N вещественных чисел. После вывожу эти числа сразу же на экран....

Чтение структуры из бинарного файла - C++
Не работает, вроде все верно. #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() ...


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

Или воспользуйтесь поиском по форуму:
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
23.12.2013, 19:13  [ТС]     Чтение из бинарного файла #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы в этот массив строки копируете?
Дааааа
Чуть поправил, как ни странно, но все заработало -.-
Yandex
Объявления
23.12.2013, 19:13     Чтение из бинарного файла
Ответ Создать тему
Опции темы

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