Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
oodessit
0 / 0 / 1
Регистрация: 21.08.2013
Сообщений: 36
#1

Вектор в файл и из файла - C++

07.09.2013, 19:43. Просмотров 935. Ответов 23
Метки нет (Все метки)

Доброго времени суток !

Есть вектор наполненный каким-то количеством указателей. Также есть класс ContainerWork, который производит с этим вектором какие-то действия. Два метода из них должны записывать в файл этот вектор и читать его из файла.

Пытался таким образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
void ContainerWork::save_info()
{
FILE *f;
if ((f = fopen("file.bin", "wb")) == NULL)
{printf("Error while opening/writing file.\n");
exit(1);}
 
ofstream fout("file.bin");
for (int i = 0; i < vemp.size(); i++)
{fout << vemp[i] << " ";}
fout.close();
}
Создается файл с подобным содержимым:
004A9888 004A9A78 004A99A0 004A97B0 004A9728

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

Помогите с этими двумя методами, плз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 19:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вектор в файл и из файла (C++):

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

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

Файл в вектор
Подскажите плз как быстро и эффективно загрузить файл размером 30-50мб в...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с...

Вектор из файла!
необходимо чтобы программа считывала вектор из файла,а потом сотртировала его...

Вектор, вывод файл
Есть вектор содержаший более 10000 элементов типа string надо это вывести в...

23
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 20:16 #2
oodessit , объясните смысл вот этого:
C++
1
2
3
4
FILE *f;
if ((f = fopen("file.bin", "wb")) == NULL)
{printf("Error while opening/writing file.\n");
exit(1);}
0
Nikitko_Cent
144 / 114 / 37
Регистрация: 27.10.2011
Сообщений: 690
Завершенные тесты: 3
07.09.2013, 20:18 #3
Цитата Сообщение от oodessit Посмотреть сообщение
Доброго времени суток !

Есть вектор наполненный каким-то количеством указателей. Также есть класс ContainerWork, который производит с этим вектором какие-то действия. Два метода из них должны записывать в файл этот вектор и читать его из файла.

Пытался таким образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
void ContainerWork::save_info()
{
FILE *f;
if ((f = fopen("file.bin", "wb")) == NULL)
{printf("Error while opening/writing file.\n");
exit(1);}
 
ofstream fout("file.bin");
for (int i = 0; i < vemp.size(); i++)
{fout << vemp[i] << " ";}
fout.close();
}
Создается файл с подобным содержимым:
004A9888 004A9A78 004A99A0 004A97B0 004A9728

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

Помогите с этими двумя методами, плз.
А что ты ожидал увидеть в выходном файле? Программа отработала нормально - в файл вывелось содержимое указателей, т.е. адреса некоторых объектов

И таки да, вот это:
Цитата Сообщение от oodessit Посмотреть сообщение
C++
1
2
3
4
FILE *f;
if ((f = fopen("file.bin", "wb")) == NULL)
{printf("Error while opening/writing file.\n");
exit(1);}
Это
0
oodessit
0 / 0 / 1
Регистрация: 21.08.2013
Сообщений: 36
07.09.2013, 20:20  [ТС] #4
проверка на успешное открытие файла
fopen возвращает нуль, если произошла ошибка во время работы функции

http://www.cplusplus.com/reference/cstdio/fopen/?kw=fopen

Добавлено через 1 минуту
Nikitko_Cent, окей, не спорю.

Я лишь попросил форумчан помочь написать метод, который бы вытаскивал данные из файла и выводил их на экран
0
Nikitko_Cent
144 / 114 / 37
Регистрация: 27.10.2011
Сообщений: 690
Завершенные тесты: 3
07.09.2013, 20:30 #5
Цитата Сообщение от oodessit Посмотреть сообщение
проверка на успешное открытие файла
fopen возвращает нуль, если произошла ошибка во время работы функции

http://www.cplusplus.com/reference/cstdio/fopen/?kw=fopen

Добавлено через 1 минуту
Nikitko_Cent, окей, не спорю.

Я лишь попросил форумчан помочь написать метод, который бы вытаскивал данные из файла и выводил их на экран
По поводу открытия файла, делай тогда уже так:

C++
1
2
3
4
ofstream fout("dfjgbdf.txt");
if (fout.is_open())
{
};
Записывай данные лучше уже тогда построчно, а не в одну строку все адреса

А по сабжу - куда считывать файл, в тот же вектор?
0
dmitry94
562 / 192 / 69
Регистрация: 25.05.2012
Сообщений: 800
07.09.2013, 20:33 #6
Цитата Сообщение от fit Посмотреть сообщение
oodessit , объясните смысл вот этого:
C++
1
2
3
4
FILE *f;
if ((f = fopen("file.bin", "wb")) == NULL)
{printf("Error while opening/writing file.\n");
exit(1);}
А что не так-то здесь?
0
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 20:35 #7
Цитата Сообщение от dmitry94 Посмотреть сообщение
А что не так-то здесь?
fopen не нужен, если юзаешь потоки istream. то что показали выше достаточно для записи в файл
1
oodessit
0 / 0 / 1
Регистрация: 21.08.2013
Сообщений: 36
07.09.2013, 20:36  [ТС] #8
Цитата Сообщение от dmitry94 Посмотреть сообщение
Цитата Сообщение от fit Посмотреть сообщение
oodessit , объясните смысл вот этого:
Код C++
1
2
3
4
FILE *f;
if ((f = fopen("file.bin", "wb")) == NULL)
{printf("Error while opening/writing file.\n");
exit(1);}
А что не так-то здесь?

вот я о том же )

Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
А по сабжу - куда считывать файл, в тот же вектор?
нет. Все равно. Лишь бы выводилось на экран из файла
0
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 20:40 #9
oodessit , vemp как как определяется?
0
oodessit
0 / 0 / 1
Регистрация: 21.08.2013
Сообщений: 36
07.09.2013, 20:41  [ТС] #10
fit, в main вот так :

vector<Employee*> vemp;
0
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 20:43 #11
oodessit, ну правильно, как ты объект-то пытался на экран вывести?)) теперь покажи что такое класс Employee
0
oodessit
0 / 0 / 1
Регистрация: 21.08.2013
Сообщений: 36
07.09.2013, 20:45  [ТС] #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Employee
{
public:
    Employee ();
    Employee (const string name_, int id_);
    virtual void wage_count () = 0;
    static int Comp (Employee *one, Employee *two);
    virtual ~Employee (){};
 
public:
    const string name;
    double wage;
    int id;
    #pragma once;
};
0
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 20:46 #13
Цитата Сообщение от oodessit
вот я о том же )
вот эта строчка
C++
1
ofstream fout("file.bin");
открывает файл для записи. для проверки открылся файл или нет надо запихать ее в условие как показал Nikitko_Cent . таким образом применение fopen бессмысленно. к тому же, ты файл открыл как бинарник (модификатор wb)
0
Nikitko_Cent
144 / 114 / 37
Регистрация: 27.10.2011
Сообщений: 690
Завершенные тесты: 3
07.09.2013, 20:46 #14
Чтоб не мучиться с выводом в цикле, перегрузи для класса оператор <<

P.S. выпиливаюсь с темы, пойду спать
0
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 20:48 #15
oodessit, какие поля надо вывести в файл? name, age, id или все сразу?
0
oodessit
0 / 0 / 1
Регистрация: 21.08.2013
Сообщений: 36
07.09.2013, 20:50  [ТС] #16
fit, name, wage, id
0
dmitry94
562 / 192 / 69
Регистрация: 25.05.2012
Сообщений: 800
07.09.2013, 20:58 #17
Цитата Сообщение от fit Посмотреть сообщение
fopen не нужен, если юзаешь потоки istream. то что показали выше достаточно для записи в файл
Понял, не внимательно посмотрел первый пост
0
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 21:00 #18
ну так и надо выводить поля:
C++
1
2
for (int i = 0; i < vemp.size(); i++)
{fout << vemp[i].name << " "<< vemp[i].wage << " " << vemp[i].id <<endl;}
не уверен в синтаксисе, попробуй
0
oodessit
0 / 0 / 1
Регистрация: 21.08.2013
Сообщений: 36
07.09.2013, 21:33  [ТС] #19
в файл записывает теперь отлично. Только модификатор еще надо было сменить на w+

вопрос остался в том, как это все считывать теперь и выводить на экран
0
fit
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 21:49 #20
покажи содержимое файла
0
07.09.2013, 21:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2013, 21:49
Привет! Вот еще темы с решениями:

Чтение из файла в вектор
Доброго времени суток! Подскажите, пожалуйста, пишу как казалось довольно...

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

Ввод из файла в вектор
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include...

Как записать вектор в файл?
Как записать вектора в файл? Вектор содержит тип long long. Записать в одну...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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