boost::serialization Probleme mit std::list?
-
Hallo,
ich möchte gern Bilder mit Boost Serialisieren, was soweit auch schon Funktioniert.
Bei Bildern von einer Dateigröße über 2 Kilobyte stürzt das Programm in der Funktion load einfach ab
#include <boost/archive/binary_oarchive.hpp> #include <boost/archive/binary_iarchive.hpp> #include <boost/serialization/string.hpp> #include <boost/serialization/list.hpp> #include <boost/serialization/nvp.hpp> #include <boost/serialization/binary_object.hpp> #include <iostream> #include <fstream> #include <string> #include <list> using namespace std; typedef std::list<char> CharCon; class testClass { public: testClass() { } testClass(const std::string &name) : name_(name) { dummystring_ = "dummy"; } std::string getName() const { return name_; } CharCon getContainer() const { return dataContainer; } void readFile(const std::string &file) { std::ifstream::pos_type size; std::ifstream infile(file.c_str(), std::ios::in | std::ios::binary | std::ios::ate); if (infile.is_open()) { size = infile.tellg(); char *buffer = new char[size]; infile.seekg(0, ios::beg); infile.read(buffer, size); infile.close(); dataContainer.resize(size); std::copy(buffer, buffer+size, dataContainer.begin() ); delete [] buffer; } } private: friend class boost::serialization::access; template <typename Archive> friend void serialize(Archive &ar, testClass &p, const unsigned int version); std::string name_; std::string dummystring_; CharCon dataContainer; }; template <typename Archive> void serialize(Archive &ar, testClass &p, const unsigned int version) { ar & p.name_; //ar & BOOST_SERIALIZATION_NVP(p.dataContainer); ar & boost::serialization::make_nvp("dataContainer",p.dataContainer); ar & p.dummystring_; } void save() { std::ofstream file("archiv.bin"); boost::archive::binary_oarchive oa(file); testClass ts("foo bar!"); ts.readFile(std::string("test.bmp")); oa << ts; } void load() { std::ifstream file("archiv.bin"); boost::archive::binary_iarchive ia(file); testClass ts; ia >> ts; std::cout << "ts name: " << ts.getName() << std::endl; std::cout << "ts dataContainer size: " << ts.getContainer().size() << std::endl; } int main() { save(); load(); }Gibt es eine möglich das dieser Code auch Größere Dateien Serialisieren kann?
Vielen Dank im Voraus
-
Lösung:
//... std::ofstream file("archiv.bin", std::ios::binary); //... std::ifstream file("archiv.bin", std::ios::binary); //...