向/从映射文件 C++ 写入和读取

Posted

技术标签:

【中文标题】向/从映射文件 C++ 写入和读取【英文标题】:Writing and Reading to/from a Mapped File C++ 【发布时间】:2014-01-15 13:47:46 【问题描述】:

我有这个结构:

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 行)给出了访问冲突错误

谁能告诉我,我是否误解了 managed_map_file 的概念,或者这段代码有什么问题?

【问题讨论】:

【参考方案1】:

您正在 putData 函数中创建一个名为“MyVector”的向量,但您正在 getData 函数中搜索一个名为“MyVector2”的向量。 名称必须相同。它就像一个标识符。

【讨论】:

以上是关于向/从映射文件 C++ 写入和读取的主要内容,如果未能解决你的问题,请参考以下文章

C++:从内存映射文件中读取/获取数据

内存映射阅读器找不到全局内存映射对象

C++ 高级教程:C++ 文件和流

Java中csv文件读写分析

内存映射文件和单个块的原子写入

infos