Decompressing a file using boost












1















I want to decompress a file using boost that has been compressed using bzip2



I tried the following which leads to an error I can not explain



std::stringstream readData(const std::string path) {
std::stringstream myStream;
std::ifstream input(path,std::ios_base::in);

boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
in.push(input);
in.push(boost::iostreams::bzip2_decompressor());
boost::iostreams::copy(in,myStream);

return myStream;
}


I used c++17, boost 1.58 and gcc 8.0 to compile the code above



and get the following error :



terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injectorstd::logic_error >'
what(): chain complete


Would appreciate any help/tips on how to solve this










share|improve this question





























    1















    I want to decompress a file using boost that has been compressed using bzip2



    I tried the following which leads to an error I can not explain



    std::stringstream readData(const std::string path) {
    std::stringstream myStream;
    std::ifstream input(path,std::ios_base::in);

    boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
    in.push(input);
    in.push(boost::iostreams::bzip2_decompressor());
    boost::iostreams::copy(in,myStream);

    return myStream;
    }


    I used c++17, boost 1.58 and gcc 8.0 to compile the code above



    and get the following error :



    terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injectorstd::logic_error >'
    what(): chain complete


    Would appreciate any help/tips on how to solve this










    share|improve this question



























      1












      1








      1








      I want to decompress a file using boost that has been compressed using bzip2



      I tried the following which leads to an error I can not explain



      std::stringstream readData(const std::string path) {
      std::stringstream myStream;
      std::ifstream input(path,std::ios_base::in);

      boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
      in.push(input);
      in.push(boost::iostreams::bzip2_decompressor());
      boost::iostreams::copy(in,myStream);

      return myStream;
      }


      I used c++17, boost 1.58 and gcc 8.0 to compile the code above



      and get the following error :



      terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injectorstd::logic_error >'
      what(): chain complete


      Would appreciate any help/tips on how to solve this










      share|improve this question
















      I want to decompress a file using boost that has been compressed using bzip2



      I tried the following which leads to an error I can not explain



      std::stringstream readData(const std::string path) {
      std::stringstream myStream;
      std::ifstream input(path,std::ios_base::in);

      boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
      in.push(input);
      in.push(boost::iostreams::bzip2_decompressor());
      boost::iostreams::copy(in,myStream);

      return myStream;
      }


      I used c++17, boost 1.58 and gcc 8.0 to compile the code above



      and get the following error :



      terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injectorstd::logic_error >'
      what(): chain complete


      Would appreciate any help/tips on how to solve this







      c++ boost decompression bzip2






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 24 '18 at 19:18







      XPenguen

















      asked Nov 24 '18 at 19:06









      XPenguenXPenguen

      1197




      1197
























          1 Answer
          1






          active

          oldest

          votes


















          1














          The device needs to be the last item you push into the filtering_streambuf, after you have pushed a device you aren't allowed to push anything else which is why you are getting the error. See https://www.boost.org/doc/libs/1_68_0/libs/iostreams/doc/classes/filtering_streambuf.html#policy_push



          Your code should be:



          std::stringstream readData(const std::string path) {
          std::stringstream myStream;
          std::ifstream input(path,std::ios_base::in);

          boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
          in.push(boost::iostreams::bzip2_decompressor());
          in.push(input);
          boost::iostreams::copy(in,myStream);

          return myStream;
          }





          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53461495%2fdecompressing-a-file-using-boost%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            The device needs to be the last item you push into the filtering_streambuf, after you have pushed a device you aren't allowed to push anything else which is why you are getting the error. See https://www.boost.org/doc/libs/1_68_0/libs/iostreams/doc/classes/filtering_streambuf.html#policy_push



            Your code should be:



            std::stringstream readData(const std::string path) {
            std::stringstream myStream;
            std::ifstream input(path,std::ios_base::in);

            boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
            in.push(boost::iostreams::bzip2_decompressor());
            in.push(input);
            boost::iostreams::copy(in,myStream);

            return myStream;
            }





            share|improve this answer




























              1














              The device needs to be the last item you push into the filtering_streambuf, after you have pushed a device you aren't allowed to push anything else which is why you are getting the error. See https://www.boost.org/doc/libs/1_68_0/libs/iostreams/doc/classes/filtering_streambuf.html#policy_push



              Your code should be:



              std::stringstream readData(const std::string path) {
              std::stringstream myStream;
              std::ifstream input(path,std::ios_base::in);

              boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
              in.push(boost::iostreams::bzip2_decompressor());
              in.push(input);
              boost::iostreams::copy(in,myStream);

              return myStream;
              }





              share|improve this answer


























                1












                1








                1







                The device needs to be the last item you push into the filtering_streambuf, after you have pushed a device you aren't allowed to push anything else which is why you are getting the error. See https://www.boost.org/doc/libs/1_68_0/libs/iostreams/doc/classes/filtering_streambuf.html#policy_push



                Your code should be:



                std::stringstream readData(const std::string path) {
                std::stringstream myStream;
                std::ifstream input(path,std::ios_base::in);

                boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
                in.push(boost::iostreams::bzip2_decompressor());
                in.push(input);
                boost::iostreams::copy(in,myStream);

                return myStream;
                }





                share|improve this answer













                The device needs to be the last item you push into the filtering_streambuf, after you have pushed a device you aren't allowed to push anything else which is why you are getting the error. See https://www.boost.org/doc/libs/1_68_0/libs/iostreams/doc/classes/filtering_streambuf.html#policy_push



                Your code should be:



                std::stringstream readData(const std::string path) {
                std::stringstream myStream;
                std::ifstream input(path,std::ios_base::in);

                boost::iostreams::filtering_streambuf<boost::iostreams::input>in;
                in.push(boost::iostreams::bzip2_decompressor());
                in.push(input);
                boost::iostreams::copy(in,myStream);

                return myStream;
                }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 24 '18 at 19:39









                Alan BirtlesAlan Birtles

                9,12611034




                9,12611034
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53461495%2fdecompressing-a-file-using-boost%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Ottavio Pratesi

                    Tricia Helfer

                    15 giugno