1

私の単純な解決策は次のとおりです。圧縮ファイル バッファーを作成し、このバッファーを ostream に追加します。ただし、コード例では、「output.z」のサイズは常に 0 バイトです。

#include "boost/iostreams/filtering_streambuf.hpp"
#include "boost/iostreams/filter/zlib.hpp"
#include <iostream>
#include <fstream>

struct MyStruct
{
    MyStruct() : a(3), b("BlaBla"), c(4) {}
    int a;
    const char* b;
    int c;
};

std::ostream& operator << ( std::ostream& out, const MyStruct& in )
{
    return out << in.a << std::endl << in.b << std::endl << in.c;
}

int main ( int argc, char* argv[] )
{
    try {

        {
            boost::iostreams::filtering_ostreambuf sb;

            sb.push (boost::iostreams::zlib_compressor());

            std::string file("output.z");

            std::ofstream device;
            device.open (file.c_str(), std::ios_base::binary);
            if ( device.fail() )
                throw std::runtime_error ( std::string("error opening ") + file );
            sb.push (device);

            std::ostream ls(&sb);

            MyStruct bla;
            ls << bla; 
        }

    }
    catch(boost::iostreams::zlib_error& e)
    {
        std::cout << "Zib error\n";
    }
    catch(...)
    {
        std::cout << "Any other error\n";
    }
}

この例の概念上のエラーはどこにありますか?

よろしく、ゲルト

4

0 に答える 0