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

    😉


Anmelden zum Antworten