Boost logo

Boost Users :

Subject: [Boost-users] [serialization] how can load the nth element using binary_archive?
From: gongyiling (gongyiling2010_at_[hidden])
Date: 2011-10-23 10:05:32


Hello, Everyone:

    boost::serialization is a cool library. I use it in my project. I
encounter a problem now.
I serialized a array of objects to file as following:

    std::ofstream ofs(filename, std::ios_base::binary);
    boost::binary_oarchive oar(ofs);
    oar << obj[0] << obj[1] << ... << obj[n-1];

Now I want to load the obj[i] (i>=0 && i<n) from file. I tried recording
obj[i]'s
position in file, then set file stream's pointer to that position and trying
to load it, but
failed with exception input_stream_error, can I by any means doing that?

here is my minimun code segments:

struct word_block
{
    std::string word;
    template<typename Archive>
    void serialize(Archive & ar, const unsigned int file_version )
    {
        ar & word;
    }
};

int main(int argc, char* argv[])
{
    const char* filename = "words.idx";
    word_block wb1, wb2, wb2_r;

    std::ofstream ofs(filename, std::ios_base::binary);
    boost::archive::binary_oarchive oar(ofs);
    oar << wb1;
    size_t wb2_pos = ofs.tellp(); //record the position of wb2.
    oar << wb2;
    ofs.close();

    std::ifstream ifs(filename, std::ios_base::binary);
    boost::archive::binary_iarchive iar(ifs);
    ifs.seekg(wb2_pos); //set file pointer to wb2.
    iar >> wb2_r; //failed with exception input_stream_error.
    return 0;
}

Any idea is appreciated!
 


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net