存储和加载文件中的对象

时间:2015-11-19 11:13:37

标签: c++ file class

我正在为类创建这个程序,我们应该将一个类中的对象存储在一个文件中,然后加载它们。但我总是得到最后一个对象而不是第一个。尝试了搜索功能,但它不起作用。另外一个对象的大小也不应该是38个字节,而不是48个我得到的?

void student::load()
{
fstream fin;
fin.open("StudentData.bin",ios::binary|ios::in);
fin.read((char*)this,sizeof(*this));
}
void student::store(int z)
{
fstream fout;
fout.open("StudentData.bin",ios::binary|ios::out);
//fout.seekp(38*z, fout.beg)
cout<<sizeof(*this); 
fout.write((char*)this,sizeof(*this));
}


for(i=0;i<count;i++)
{
    s[i].store(i);
}
cout<<"Done!";
student pleb;
pleb.load();
pleb.showstudent();
return 0;

}

1 个答案:

答案 0 :(得分:0)

您的fout.open()每次都会重写该文件。如果你想追加到文件,也就是说,要让每个store()调用在所有其他已经写好的学生之后写student,那么你可以使用{{1国旗。

或者,更好的是,根本不要在ios::app中打开文件。让您的store()执行接受流作为参数;然后在主程序中打开文件(每个学生一次)并将流传递给store()。这不仅可以解决您的问题,还可以使您的store()类更易于配置,因为它可以很容易地写入任何文件,或者通常可以写入student用户所需的任何流。

BTW,还要确保正确以这种方式编写student。例如,如果您的student中有任何指针(包括,例如,student成员,因为他们有内部指针),您将无法获得预期的结果。

至于对象大小,回答没有看到std::string类的整个声明是不可能的。