#include #include #include #include #include #include #include using namespace std; using namespace boost; using namespace boost::iostreams; bool compress(const std::string& source, std::string& dest, size_t destOffset) { ostringstream _sink; istringstream _source(source); filtering_istreambuf in; zlib_compressor compressor; in.push(compressor); in.push(_source); copy(in, _sink); dest.insert(destOffset, _sink.str()); return compressor.unconsumed_input().empty(); } bool uncompress(const string& source, string& dest, size_t destOffset) { ostringstream _sink; istringstream _source(source); filtering_istreambuf in; zlib_decompressor decompressor; in.push(decompressor); in.push(_source); copy(in, _sink); dest.insert(destOffset, _sink.str()); return decompressor.unconsumed_input().empty(); } void SimpleTestCompression(const std::string& OriginalData) { std::string CompressionDest; compress(OriginalData,CompressionDest,0); std::string DecompressionDest; uncompress(CompressionDest,DecompressionDest,0); } std::string GetBadString() { std::string filename("C:\\Users\\gta\\Desktop\\short_magic.txt"); std::ifstream in(filename.c_str()); std::string tmp; std::string buffer=""; while (!in.eof( )) { getline(in, tmp, '\n'); char c=(char)boost::lexical_cast(tmp); buffer+=c; tmp.clear(); } return buffer; } int main(int argc, char* argv[]) { SimpleTestCompression("Hello123"); try { SimpleTestCompression(GetBadString()); } catch (const boost::iostreams::zlib_error& e) { std::cout << "What: " << e.what() << " Error: " << e.error(); } return 0; }