从文件读取对象并获取错误

Reading objects from file and getting error

本文关键字:取错误 获取 取对象 从文件读      更新时间:2023-10-16

(这是一个家庭作业项目。)我试图从A类编写对象(包含几个字符串和INT,也包含来自B类的对象的列表)。然后,我必须从文件中读回这些对象并显示其内容。我正在使用此代码:

写作:

ofstream ofs("filestorage.bin", ios::app|ios::binary);
A d;
ofs.write((char *)&d, sizeof(d));
ofs.close();

阅读:

ifstream ifs("filestorage.bin", ios::binary);
A e(1);
while(ifs.read((char *)&e, sizeof(e))) {    
    cout<<e;
}
ifs.close();

<<已经重新定义。

它将数据写入文件中,然后将其读回,显示我想要的所有内容,但最终我遇到了一个不错的脂肪"访问违规"错误。我还尝试将简单变量写入文件中(例如int s)。效果很好;但是,当我尝试阅读对象或字符串时,我会得到"访问违规"。写作接缝是可以的,因为我没有错误。

您能告诉我为什么会发生这种情况以及我该如何解决?如果有必要,我也可以发布我的A和B课程。谢谢!

为您的班级实现两个运算符<<>>

class A {
    int a;
    string s;
pubilc:
    friend ostream& operator<< (ostream& out, A& a ) {
        out << a.a << endl;
        out << a.s << endl;
    }
    friend istream& operator>> (istream& is, A& a ) {
        //check that the stream is valid and handle appropriately.
        is >> a.a; 
        is >> a.s;
    }
};

写:

A b;
ofstream ofs("filestorage.bin", ios::app|ios::binary);
ofs << b;

阅读:

fstream ifs("filestorage.bin", ios::binary);
A b;
ifs >> b;

您可以尝试检查流状态

while(ifs.read((char *)&e, sizeof(e)).good()){
     cout<<e;
}