Если у вас есть "мёртвая" структура, в которой только одни данные, её лучше всё равно не записывать на диск как побайтовую копию структуры в памяти (а потом так же считывать её обратно), по крайней мере по двум причинам.
1. Если вы случайно (случайно?!) перекомпилируете с другим выравниванием по границам байт, слов, двойных слов (#pragma pack(n)), вы из сохранённого файла нифига не прочтёте.
2. Если вам придётся изменить структуру (а её придётся изменить, даже если вы 100% уверены, что она никогда меняться не будет), файл опять-таки станет непригодным для чтения.

Ну а если структура не мёртвая, а в ней есть другие об'екты-классы с системой выделения памяти, то это вообще атас и вы дерьма не оберётесь (сам проверял) пытаясь сначала считать с диска об'ект как есть, а потом чинить указатели и прочее.

Если об'ект нужно сохранять на диск, очень лучше сделать отдельные функции по сохранению его на диск (или хотя бы в массив байтов) и по чтению с диска (это и называется сериализацией). Лучше всего делать их как методы класса (структуры). Они должны по одному читать (писать) поля об'екта (это может показаться очень муторным, тогда в можете воспользоваться одним трюком). При этом следует уделить особое внимание версии об'екта и записывать её тоже, чтобы при изменении формата об'екта (т.е. создании новой версии его) можно было продолжать считывать в него старые данные.

Благодарность за вразумление: himself'у.