2014-01-15 12 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의 파일을 생성하는 것입니다 그 파일을 메모리에 저장하고이 구조체 유형의 데이터를 메소드에 작성하십시오. 그것은이 하나입니다

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); 

    } 

} 

을 (난 그냥 기능을 시도하고 이후는 구조체의 모든 atrributes를 기입하지 않았다) 그리고 다른 함수에서이 같은 파일에서 데이터를 읽기 위해 노력하고 있어요 : (I 단지 데이터가 파일에 존재하는 경우 파일은 물리적으로 내 하드 드라이브에 생성됩니다

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; 
} 

) 적어도 볼 수있는 마지막 데이터와 pop_back 그러나 문제는 myVector2 것은 때마다 (내가 시계 창에서 관찰 할 수 비어), 그래서 내가 파일에 데이터를 쓰는 성공 여부를 테스트 할 수 없습니다. 덧붙여서 컴파일러는 마지막 라인 (cout 라인)에서 액세스 위반 오류를 계발합니다

아무도 내가 managed_map_file 개념을 잘못 이해하고 있는지 또는이 코드가 잘못 되었습니까?

답변

0

"MyVector"라는 이름의 벡터를 putData 함수에 만들지 만 getData 함수에서 "MyVector2"라는 벡터를 검색하고 있습니다. 이름이 동일해야합니다. 그것은 식별자와 같습니다.