boost zlib



  • hallo,

    ich hab mich an diesem http://www.c-plusplus.net/forum/284365 beispiel orientiert und habe versucht, daten zu kompressieren.

    leider funktioniert es nicht ganz, und zwar wird bei der dekompression und der im code markierten stelle folgende excepion geworfen:

    boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::iostreams::zlib_error> > an Speicherposition 0x0021bce0..
    

    hier der quellcode:

    #include <iostream>
    #include <string>
    #include <sstream>
    #include <random>
    #include <functional>
    #include <fstream>
    using namespace std;
    
    #include <boost\iostreams\filtering_stream.hpp>
    #include <boost/iostreams/copy.hpp>
    #include <boost/iostreams/filtering_streambuf.hpp>
    #include <boost\iostreams\filter\bzip2.hpp>
    #include <boost\iostreams\filter\gzip.hpp>
    #include <boost\iostreams\filter\zlib.hpp>
    namespace io = boost::iostreams;
    
    int main(int argc, char* argv[])
    {
    	std::uniform_int_distribution<int> distribution(0, 99);
    	std::mt19937 engine;
    	auto generator = std::bind(distribution, engine);
    
    	string filename;
    	stringstream ausgabe;
    	stringstream sstream;
    
    	for (int i = 0; i < 10000; ++i)
    	{
    		int it = generator();
    		ausgabe << it + " ";
    	}
    
    	filename = "zlib";
    
    	std::fstream file_zlib_write(filename,std::ios_base::out | std::ios_base::binary); 
    
    	io::filtering_ostream out; 
    	out.push(io::zlib_compressor());
    	out.push(file_zlib_write); 
    
    	// Write source 
    	out << ausgabe.str() << "\n";
    
    	file_zlib_write.close();
    
    	std::fstream file_zlib_read(filename, std::ios_base::in | std::ios_base::binary);
    	if (file_zlib_read.good())
    	{
    		io::filtering_istream in;
    
    		in.push(io::zlib_decompressor());
    		in.push(file_zlib_read);
    
    		std::stringstream ss;
    		io::copy(in, ss); // bei diesem copy wird die exception geworfen
    
    		stringstream out_data;
    		string line;
    		do
    		{
    			getline(ss, line);
    			out_data << line;
    
    		} while (!ss.eof());
    
    			}
    	return 0;
    }
    

    vielleicht sieht jemand den fehler 🙂

    mfg

    gucky



  • Ich sehe, dass du Forward und Backslashes mischst.



  • hat sich erledigt, da die datei die ich geschrieben hab im erten teil des codes lehr war.


Anmelden zum Antworten