Как сохранить структуру данных в бинарный файл с помощью рекурсии, а потом восстановить структуру из этого же файла?
Я имею структуру, которая хранит номер аудитории, кафедру этой аудитории и количество компьютеров в ней:
typedef struct Cabinet{
int numAuditory;
string facultet;
int PCnumber;
Cabinet* next;
}TCabinet;
Требуется написать 2 функции: одна должна сохранять данную структуру в бинарный файл с помощью рекурсии, а вторая должна восстанавливать структуру из этого файла в память также с помощью рекурсии (если это возможно). Помогите мне, пожалуйста, разобраться!
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, если очень хочется рекурсивно, то примерно так можно (просто намек, не готовая программа):
struct Cabinet
{
int numAuditory;
string facultet;
int PCnumber;
Cabinet* next;
};
void writeCab(ostream& os, Cabinet* C)
{
os.write((char*)&C->numAuditory,sizeof(int));
os.write((char*)&C->PCnumber,sizeof(int));
size_t len = C->facultet.size();
os.write((char*)&len,sizeof(len));
os.write(C->facultet.c_str(),len);
int next = (C->next != nullptr);
os.write((char*)&next,sizeof(int));
if (C->next) writeCab(os,C->next);
}
Cabinet * readCab(istream& is)
{
Cabinet* C = new Cabinet;
is.read((char*)&C->numAuditory,sizeof(int));
is.read((char*)&C->PCnumber,sizeof(int));
size_t len;
is.read((char*)&len,sizeof(len));
C->facultet.resize(len);
is.read(C->facultet.data(),len);
int next;
is.read((char*)&next,sizeof(int));
if (next) C->next = readCab(is); else C->next = nullptr;
return C;
}
Поочередно пишем и читаем потом в том же порядке. Строку обрабатываем особо, next для понимания, последний ли в цепочке или нет...
Файлы не забудьте открывать в бинарном режиме.