2014-01-15 27 views
0

我有這樣的結構:的寫入和讀取/從映射文件C++

struct DataItem 
{ 
    std::string tag;   
    vector<unsigned char> data_block; 
    time_t input_time;  
    int version_mark; 
}; 

什麼,我要做的是創建與提升(1.47.0版本& Windows平臺)地圖一個10MB的文件,文件到內存,並在方法中寫入這個結構類型的一些數據。正是這一個(我沒補結構的所有atrributes因爲我只是想的功能)

void putData() 
{ 

    managed_mapped_file mfile(create_only,"MyMappedFile", 10485760); 

    typedef allocator<int, managed_mapped_file::segment_manager> MnmapfileAllocator; 
    typedef vector<DataItem,MnmapfileAllocator> MyVector; 

    const MnmapfileAllocator alloc_inst (mfile.get_segment_manager()); 

    MyVector *myvector = mfile.construct<MyVector>("MyVector")(alloc_inst); 

    time_t t = time(0); 
    struct tm* now = localtime(&t); 


    for (int j=0; j<10; j++) 
    { 
     DataItem data; 

     data.version_mark = j; 
     data.timestamp = now->tm_sec; 

     myvector->push_back(data); 

    } 

} 

而且從另一個功能我想從這樣的文件中讀取數據:(我只是pop_back最後的數據看,至少,如果有對文件數據)

void getData() 
{ 
    DataItem data; 
    managed_mapped_file mfile(open_only,"MyMappedFile"); 

    typedef allocator<int, managed_mapped_file::segment_manager> MnmapfileAllocator; 
    typedef vector<DataItem,MnmapfileAllocator> MyVector2; 

    const MnmapfileAllocator alloc_inst (mfile.get_segment_manager()); 
    MyVector2 *myvector2 = mfile.find<MyVector2>("MyVector2").first; 

    myvector2->pop_back(); 
    std::cout << myvector2->back().version_mark << std::endl; 
} 

該文件被創建到我的硬盤物理但問題是myVector2是空的,每次(我可以從手錶窗格觀察它),所以我無法測試,即使我成功地將數據寫入文件或不。另外,編譯器在最後一行(cout行)中給出訪問衝突錯誤

任何人都可以告訴我,我是否誤解了managed_map_file的概念,或者這段代碼有什麼問題?

回答

0

您正在putData函數中創建一個名爲「MyVector」的向量,但是您正在getData函數中搜索名爲「MyVector2」的向量。 名稱必須相同。這就像一個標識符。