Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
DroidAn
7 / 7 / 0
Регистрация: 18.11.2011
Сообщений: 150
#1

Дописать в файл запись пользовательского класса - C++

03.04.2012, 22:40. Просмотров 1034. Ответов 9
Метки нет (Все метки)

Стоит следующая задача - нужно дописать в файл запись пользовательского класса.
Есть пользовательский тип:
C++
1
2
3
4
5
6
7
class Hostel
{
public:
    string FIO;
    int GroupNumber;
    int RoomNumber;
};
Также есть вектор объектов класса Hostel, и перегрузка к нему:
C++
1
2
ofstream& operator << (ofstream& s, Hostel& obj)
    { s<<obj.FIO<<endl<<obj.GroupNumber<<endl<<obj.RoomNumber ;  return s;}
Метод записи в файл:
C++
1
2
3
4
5
6
7
    void WriteInFile(Hostel *hostel)
    {
        ofstream file;
        file.open("ReadMe.txt");
        file << *hostel;
        file.close();
    }
Проблема в том, что при попытке дописать данные, программа стирает уже существующие в файле.
С чем может быть связана такая проблема?

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

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

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

Запись класса в файл - C++
Доброго времени суток! Вот появился тупик, есть базовый класс и производные классы class Figure{ protected: int x,y; ...

Запись экземпляра класса в файл - C++
есть класс _matrix.Я выполняю некии действия с объектом этого класса,а потом записываю этот объект в файл. Теперь у меня есть...

Запись объекта класса в файл - C++
Доброго времени суток! нужно сохранить объект вот такого класса: class Act { public: Act(); Act(string...

Запись данных класса в файл - C++
Не могу никак разобраться что же я делаю не так. В общем есть написанный элементарный класс ClientData, я хочу записать объект такого типа...

9
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
03.04.2012, 23:58 #2
попытайся сделать указатель на файл

C++
1
2
3
4
5
6
7
8
FILE *file=NULL;
file=fopen("ReadMe.txt","a");
if(!file)
{
    return; //Или еще какое сообщение типо "Файл не найден"
}
fputs(*hostel,file);
fclose(file);
1
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
04.04.2012, 00:04 #3
Цитата Сообщение от DroidAn Посмотреть сообщение
C++
1
file.open("ReadMe.txt");
=>
C++
1
file.open("ReadMe.txt", ios::out | ios::app);
1
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
04.04.2012, 00:14 #4
Цитата Сообщение от kazak Посмотреть сообщение
ios::app
это за что отвечает?

аналог ios::out?
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
04.04.2012, 00:19 #5
Это значит, что файл будет открыт на запись, и если файл существует, то будет открыт существующий файл и указатель в файле будет перемещен в конец файла. Запись будет происходить всегда в конец файла. Есть еще режим ios::ate, который аналогичен ios::app, с той лишь разницей, что позволяет записывать в любом месте в файле.
1
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
04.04.2012, 00:20 #6
Jazz411, строчки из документации
Opens file name and connects f to it. If the file does not already exist, an attempt is made to create it with protection mode prot unless ios::nocreate is set. By default, prot is filebuf::openprot, which is 0644. Failure occurs if f is already open, or the call to f.rdbuf()->open() fails. ios::failbit is set in f's error status on failure. The members of open_mode are bits that may be or'ed together. (Because the or'ing returns an int, open() takes an int rather than an open_mode argument.) The meanings of these bits in mode are:


ios::app
A seek to the end of file is performed. Subsequent data written to the file is always added (appended) at the end of file. On some systems this is implemented in the operating system. In others it is implemented by seeking to the end of the file before each write. ios::app implies ios::out.

ios::ate
A seek to the end of the file is performed during the open(). ios::ate does not imply ios::out.

ios::in
The file is opened for input. ios::in is implied by construction and opens of ifstreams. For fstreams it indicates that input operations should be allowed if possible. It is legal to include ios::in in the modes of an ostream in which case it implies that the original file (if it exists) should not be truncated. If the file being opened for input does not exist, the open will fail.

ios::out
The file is opened for output. ios::out is implied by construction and opens of ofstreams. For fstream it says that output operations are to be allowed. ios::out may be specified even if prot does not permit output.

ios::trunc
If the file already exists, its contents will be truncated (discarded). This mode is implied when ios::out is specified (including implicit specification for ofstream) and neither ios::ate nor ios::app is specified.

ios::nocreate
If the file does not already exist, the open() will fail.

ios::noreplace
If the file already exists, the open() will fail. Only valid with ios::out.
p.s. правда, насколько я знаю, ios::nocreate поддерживается не всеми компиляторами и не всеми платформами
1
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
04.04.2012, 00:22 #7
ios::binary нехватает.
1
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
04.04.2012, 00:23 #8
а я ясно спасибо парни
0
DroidAn
7 / 7 / 0
Регистрация: 18.11.2011
Сообщений: 150
04.04.2012, 23:04  [ТС] #9
Ребята, а как начинать "дописывать" в файл с новой строки?
Почему-то символы '\r' и '\n' не работают.
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
04.04.2012, 23:35 #10
Цитата Сообщение от DroidAn Посмотреть сообщение
file << *hostel;
либо так
C++
1
file << *hostel << '\n';
либо так
C++
1
file << *hostel << endl;
1
04.04.2012, 23:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2012, 23:35
Привет! Вот еще темы с ответами:

Запись в файл объекта класса - C++
class Object { private: int myN; std::vector&lt;std::string&gt; myLines; public: Object(); ~Object(); void...

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

Запись в файл объекта класса - C++
Добрый вечер,предположим есть подобный класс,с полями : const SIZE = 10; class myClass { public: int arr; ...

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


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

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

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