我有这个结构:
struct DataItem
{
std::string tag;
vector<unsigned char> data_block;
time_t input_time;
int version_mark;
};
我要做的是创建一个10MB的文件,使用boost(1.47.0版本和Windows平台)将该文件映射到内存,并在方法中写入此结构类型的一些数据。就是这个:(因为我只是尝试了这个功能,所以我没有填写结构的所有内容)
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 line)中提出访问冲突错误
有人能告诉我,我是否误解了managed_map_file概念,或者这段代码有什么问题?
答案 0 :(得分:0)
您正在putData函数中创建名为“MyVector”的向量,但您正在getData函数中搜索名为“MyVector2”的向量。 名字必须相同。它就像一个标识符。