我有以下结构体
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不会被分配任何垃圾?参数将只会添加到结构体的末尾。
根据参考文献,ifstream read函数应该在读取指定位数之前遇到eof时停止读取,所以希望这听起来就像它听起来那么简单。我的测试也表明,问题的答案是肯定的,但是我想确认一下,因为我一直在阅读关于二进制文件中填充的内容,不完全理解它的工作原理。