правильный способ - определить оператор << и оператор >> для студента. Тогда это просто пирог, связанный с сохранением и чтением структуры.
std::ostream & operator<<(std::ostream & os, Student const & rhs)
{
for(int i=0; i<NAME_SIZE; ++i)
{
os << rhs.fname[i];
}
os << id;
return os;
}
std::istream & operator>>(std::istream & is, Student & rhs)
{
for(int i=0; i<NAME_SIZE; ++i)
{
is >> rhs.fname[i];
}
is >> id;
return is;
}
Поэтому, когда вам нужно сохранить в файл, вы просто делаете:
file << person;
, когда вам нужно прочитать из него:
file >> person;
PS: Я бы предложил сделать реализацию оператора более надежной, чем это, возможно, с помощью специальных маркеров, чтобы вы могли обнаружить проблемы при чтении из файла.