- 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;}