C++ 无法从序列化文件中读取

C++ 无法从序列化文件中读取,c++,serialization,boost,C++,Serialization,Boost,在下面的代码中,我通过boost serialization library将文件内容写入备份序列化文件,但我观察到,每当我需要将所有数据存储在文件中时,只有我才能读取整个数据。 所以,如果我不执行写操作,只是尝试获取备份文件中的存储数据,那么就无法读取备份文件中存储的任何内容。 在执行整个代码之后,我能够从文件中读取序列化映射,但在只执行读取操作而不执行写入操作时,我无法读取任何内容。 下面是写操作的注释代码段。如果代码中有错误,请给出建议 writefile Api代码的注释部分 /*对象写

在下面的代码中,我通过boost serialization library将文件内容写入备份序列化文件,但我观察到,每当我需要将所有数据存储在文件中时,只有我才能读取整个数据。 所以,如果我不执行写操作,只是尝试获取备份文件中的存储数据,那么就无法读取备份文件中存储的任何内容。
在执行整个代码之后,我能够从文件中读取序列化映射,但在只执行读取操作而不执行写入操作时,我无法读取任何内容。 下面是写操作的注释代码段。如果代码中有错误,请给出建议

writefile Api代码的注释部分
/*对象写入文件(“wasim”,23);
对象写入文件(“可用”,12);
对象写入文件(“杰克”,32岁);
书面文件(“约翰”,37岁);
对象写入文件(“恨”,11);
对象写入文件(“kk”,37)*/
目标书面文件(“abc”,39);
obj.readfile();
ret_value=obj.parse_map();

为什么你有C++和Boost头的混合,刚开始工作在Boost上,不知道STL映射和向量兼容性与Boost的关系。“但是在执行读操作时,只写不读任何东西。”-这不是简单地意味着文件还不存在吗?文件已经存在,但无法读取旧数据,因此每当执行写入操作时,读取操作都只能读取该特定数据,但忽略以前写入文件的旧数据。看起来像是追加问题,因为我可以看到旧内容被忽略,而新内容仅被删除书面的IOS::应用程序模式将在文件中添加内容,但是在阅读只读的最近的内容时,可以了解为什么你有C++和Boost头的混合,而刚开始在Boost上的工作却不知道STL映射和向量兼容性与Boost的关系。-这不是简单地意味着文件还不存在吗?文件已经存在,但无法读取旧数据,因此每当执行写入操作时,读取操作都只能读取该特定数据,但忽略以前写入文件的旧数据。看起来像是追加问题,因为我可以看到旧内容被忽略,而新内容仅被删除书面的ios::app模式将在文件中添加内容,但在读取时只能读取最近写入的内容
 /*obj.writefile("wasim",23);
    obj.writefile("available",12);
    obj.writefile("jack",32);
    obj.writefile("john",37);
    obj.writefile("hate",11);
    obj.writefile("kk",37);*/
    obj.writefile("abc",39); 
    obj.readfile();
    ret_value=obj.parse_map();
    cout<<ret_value;
#include <map>
#include <sstream>
#include <string>
#include <boost/serialization/map.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <fstream>
#include <iostream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
using namespace std;
enum RESULT_T
            {

            ret_error   =-1,
            ret_success = 0

            } ;


class object_model
{
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & mymap;

    }

    map<string,int> mymap;



public:
         object_model(){

     };

     void writefile (string key,int value);
     map<string, int> readfile();
     RESULT_T parse_map();
     int deserialize_validation();

};



 RESULT_T object_model::parse_map()
{

    auto new_map = readfile();
    for (auto itr: new_map)
               {

                cout<<itr.first <<":"<<itr.second<<endl;

               }

return ret_success;
}
void object_model::writefile( string key, int value)
{

    mymap[key] = value;
    std::ofstream ss("backup",ios::binary);
    boost::archive::binary_oarchive oarch(ss);
    oarch << mymap;

}


map<string, int>  object_model::readfile()
{
    std::map<string,int> new_map;
       {
       std::ifstream ifs("backup",ios::binary);
       boost::archive::binary_iarchive ia(ifs);
       ia >> new_map;
       }

       return new_map;


}
int main()
{
    RESULT_T ret_value;
    object_model obj;
    obj.writefile("hate",11);
    obj.writefile("wasim",23);
    obj.writefile("available",12);
    obj.writefile("jack",32);
    obj.writefile("john",37);
    obj.writefile("kk",37);

    obj.readfile();
    ret_value=obj.parse_map();
    cout<<ret_value;
    }