fstream file;
Patient Obj("XXX",'M',"XXX");
file.open("Patients.dat",ios::in|ios::out|ios::app);
file.seekg(ios::end);
file.write((char*)&Obj,sizeof(Obj));
file.seekg(ios::beg);
Patient x;
file.read((char*)&x,sizeof(x));
x.printallInfo();
file.close();
我正在使用此代码将对象写入文件,但是当我读取数据时 VC++ 6 崩溃并抛出异常“访问冲突”。(写入成功)
完整代码
#include <iostream>
#include<fstream>
#include <iomanip.h>
#include "Patient.cpp"
using namespace std;
int main(){
fstream file;
Patient Obj("XXX",'M',"XXX");
file.open("Patients.dat",ios::in|ios::out|ios::app);
file.seekg(ios::end);
file.write((char*)&Obj,sizeof(Obj));
file.seekg(ios::beg);
Patient x;
file.read((char*)&x,sizeof(x));
file.close();
return 0;
}
最佳答案
这似乎是一种脆弱且不可移植的编码类方法。您执行此操作的方式可能会发生的一件事是您没有对正在序列化的数据进行深度复制。例如,如果您的 Patient
类的成员之一是 std::string
,则会向文件写入一个裸指针,但不会写入任何字符串数据。更糟糕的是,当你读回它时,指针指向……某处……
处理这个问题的更好方法是实际实现一个特定于类的方法,该方法确切地知道如何序列化和反序列化每个成员。
关于C++ 从文件错误中读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002734/