Страницы

Поиск по вопросам

четверг, 13 июня 2019 г.

Запись string в бинарый файл . С++

Нужна помощь.
У меня есть класс с полями типа: string, int и float; Как мне занести данные даного класса в бинарный файл?
Пример кода:
class foo { string Name; int Age; public:
void show() { cout << "Name = " << Name << endl; cout << "Age = " << Age << endl; } };
int main() { foo obj("Something Name", 10); foo obj2;
ofstream file("file.bin", ios::binary | ios::app); file.write((char *)(&obj), sizeof(obj)); file.close();
ifstream file2("file.bin", ios::binary); file2.read((char *)(&obj2), sizeof(obj2)); file2.close();
obj2.show();
return 0; }
В результате работы программы выскакивает ошибка.


Ответ

Этот вопрос обсуждался, но раз вы спрашиваете как, а не почему :), то примерно так:
class foo { string Name; int Age; public:
void show() { cout << "Name = " << Name << endl; cout << "Age = " << Age << endl; }
void write(ostream& os) { os.write((char*)&Age, sizeof(Age)); // Запись POD-члена size_t len = Name.length()+1; // Длина с нулевым байтом os.write((char*)&len, sizeof(len)); // Запись длины os.write((char*)Name.c_str(),len); // Запись данных }
void read(istream& in) { in.read((char*)&Age,sizeof(Age)); // Чтение POD-члена size_t len; // Переменная для длины in.read((char*)&len, sizeof(len)); // Чтение длины записанной строки char * buf = new char[len]; // Выделение буфера для чтения in.read(buf,len); // Чтение (с нулевым байтом) Name = buf; // Присвоение считанной строки члену delete[]buf; // Освобождение памяти } };
А дальше -
ofstream file("file.bin", ios::binary | ios::app); obj.write(file);
Ну и, соответственно, read
Это - наброски без проверки ошибок, попроще - чтоб была понятна идея. Можно читать прямо в строку, функцию write нужно сделать константной etc etc... но главное, надеюсь, ясно?

Комментариев нет:

Отправить комментарий