当前位置: 代码迷 >> PB >> 将c++类写入二进制文件,该如何解决
  详细解决方案

将c++类写入二进制文件,该如何解决

热度:94   发布时间:2016-04-29 08:18:54.0
将c++类写入二进制文件
C/C++ code
void CTestDlgDlg::OnWrite() {    // TODO: Add your control notification handler code here    fstream f("testfile2.txt",ios::out | ios::binary);    f.write((char *)&cstuMan,sizeof(cstuMan));    f.close();    CStudentManage cstuMan1;    //fstream f;    f.open("testfile2.txt",ios::in | ios::binary);    f.read((char *)&cstuMan1,sizeof(cstuMan1));    f.close();    }

CStudentManage是一个有成员变量和成员函数的类,现在想把这个类以二进制方式写入文件中去,用上面的方法写进去之后cstuMan1读取不到数据,这段代码是仿照读写一个只有成员变量的结构体写的,发现那个结构体可以写入并且读出数据,但这个类按照这种方法读写有问题

------解决方案--------------------
用boost.serialization。
------解决方案--------------------
boost.serialization的例子
C/C++ code
/** * @file simple.cc * @brief * * @author garcia.wul ([email protected]) * @date Jun 24, 2010 2:59:05 PM * @version 0.0.0 * */#include <boost/archive/text_iarchive.hpp>#include <boost/archive/text_oarchive.hpp>#include <cstdlib>#include <fstream>#include <iostream>#include <string>typedef boost::archive::text_iarchive iarchive;typedef boost::archive::text_oarchive oarchive;using namespace std;class Data {friend class boost::serialization::access;template<class Archive>void serialize(Archive& ar, const unsigned int version) {    ar& single_data;    ar& single_str;}public:    static void save(const Data& obj, string filename) {        ofstream stream(filename.c_str());        oarchive oa(stream);        oa << obj;    }    static void load(Data& obj, string filename) {        ifstream ifs(filename.c_str());        iarchive ia(ifs);        ia >> obj;    }public:    int single_data;    string single_str;};int main(int argc, char const** argv) {    Data data;    data.single_data = 1;    data.single_str = "wuliang";    Data::save(data, "1.db");    Data data2;    Data::load(data2, "1.db");    cout << data2.single_data << endl;    cout << data2.single_str << endl;    return EXIT_SUCCESS;}
  相关解决方案