私は次の構造体を持っています
struct MyStruct
{
int param1;
float param2;
double param3;
}
を使用してバイナリファイルに書き込むことができます
fstream binary_file(file, ios::out|ios::binary);
binary_file.seekg(0, ios::beg);
binary_file.write((char *)aStruct,sizeof(MyStruct));
binary_file.close();
そして私はそれを使用してそれを回復することができます
ifstream binary_file;
binary_file.open(file, ios::binary);
binary_file.seekg(0, ios::beg);
binary_file.read((char *)aStruct, sizeof(MyStruct));
binary_file.seekg (0, ios::end);
binary_file.close();
これはすべてうまくいきます。ここで、構造体の定義を次のように変更します
struct MyStruct
{
int param1;
float param2;
double param3;
int paramA;
float paramB;
double paramC
}
問題は、定義が変更される前に書き込まれたファイルを読み取る場合、param1、param2、および param3 が常に正しく設定され、paramA、paramB、および paramC にジャンクが割り当てられないことを確認できるかどうかです。パラメータは、構造体の最後にのみ追加されます。
参照によると、指定されたビット数を読み取る前に eof が発生した場合、ifstream 読み取り関数は停止する必要があるため、うまくいけば、これは聞こえるほど簡単です。私のテストでは、質問に対する答えが「はい」であることも示されていますが、たとえばバイナリファイルのパディングについて読んでいて、それがどのように機能するかを完全には理解していないので、皆さんに確認したいと思います.