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的概念,或者這段代碼有什麼問題?