2016-11-20 70 views
0

給定的結構示例:德/序列化對象地圖?

struct SomeName 
{ 
    SomeName() 
    { 
    } 

    ~SomeName() 
    { 
    } 

    unsigned int Id; 
    std::string Name; 
    std::map<unsigned int, unsigned int> Todo; 
} 

我如何序列化一個std ::向量二進制文件?

我曾嘗試:

bool Save(std::string filename, std::vector<SomeName> &items) 
{ 
    std::ofstream fileWrite; 
    fileWrite.open(filename.c_str(), std::ios::out | std::ios::binary); 
    if (!fileWrite) 
    { 
     std::cout << "Failed to open file for writting...\n"; 
     return false; 
    } 
    fileWrite.write(reinterpret_cast<const char*>(&items[0]), items.size()*sizeof(SomeName)); 
    fileWrite.close(); 
    return true; 
} 

它的工作原理產生的dat文件,但閱讀它的時候回到它總是失敗,因爲在std ::的地圖裏面它。

我試圖瞭解墜毀的消息是訪問衝突,它使我相信,它不知道如何將文件讀回時初始化地圖來填補呢?或類似的東西,我不明白這一點。

訪問衝突讀取位置0xfeeeff03。

指回// <<< THIS LINE

_Nodeptr _Copy(_Nodeptr _Rootnode, _Nodeptr _Wherenode) 
    { // copy entire subtree, recursively 
    _Nodeptr _Newroot = _Myhead; // point at nil node 

    if (!_Isnil(_Rootnode)) // <<< THIS LINE 
     { // copy a node, then any subtrees 
     _Nodeptr _Pnode = _Buynode(_Myhead, _Wherenode, _Myhead, 

SerializationCpp.exe的std :: _樹的std ::分配器>,0>> :: _複製(STD :: _ Tree_nod,性病::分配器>,0>> :: _節點* _Rootnode,性病:: _ Tree_nod,性病::分配器>,0>> :: _節點* _Wherenode)線1078個+位於0xC字節C++

這是我如何讀它回:

bool Load(std::string filename, std::vector<SomeName> &items) 
{ 
    items.clear(); 
    std::ifstream file; 
    file.open(filename.c_str(), std::ios::in | std::ios::binary); 
    if (!file) 
    { 
     std::cout << "Failed to open file for reading...\n"; 
     return false; 
    } 

    SomeName temp; 
    while (file.read(reinterpret_cast<char*>(&temp), sizeof temp)) 
    { 
     items.push_back(temp); 
    } 
    file.close(); 
    return true; 
} 

在簡歷中,我該如何序列化/反序列化結構從/到一個二進制文件?

回答

0

這種結構不能僅僅通過將其解釋爲字符數組,因爲它的部件指的是動態存儲器被序列化。使用一些序列化庫(例如boost序列化或谷歌protobuf)。

或者,您可以手動實現串行化例程但這非常繁瑣和容易出錯的工作:

  1. ID到文件
  2. Name.length()到文件
  3. Name.data()到文件
  4. Todo.length()到文件
  5. Todo每個成員寫入其鍵和值
+0

非常豐富的內容,我在印象之下是有可能的,因爲它沒有地圖就按預期工作。 – Guapo