如何在使用boost::bzip2_decompressor()时摆脱额外的值

how to get rid of extra values while using boost::bzip2_decompressor()

本文关键字:decompressor boost bzip2      更新时间:2023-10-16

我有一个txt文件:gcc-4.7.2.txt:与数据写入:你好,这是一个测试文件。谢谢:压缩为gcc-4.7.2.tar.bz2

现在,我运行以下代码:
#include <sstream>
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/bzip2.hpp>
#include <boost/filesystem.hpp>
int main()
{
    using namespace std;
    using namespace boost::iostreams;
    char filename[] = "gcc-4.7.2.tar.bz2";
    if (!boost::filesystem::exists(filename))
    {
        cout << "Can't find " << filename << ". Expect errors to follow! " << endl;
    }
    ifstream file(filename, ios_base::in | ios_base::binary);
    filtering_streambuf<input> in;
    filtering_streambuf<output> out;
    in.push(bzip2_decompressor());
    in.push(file);
    try
    {
        //cout <<  "in_file:" << in << endl;
        boost::iostreams::copy(in, cout);
        //boost::iostreams::copy(in, out);
        //cout << cout << endl;
        //boost::iostreams::copy(in, compressed_string);
        //cout << "Copied" << compressed_string << "  " <<  in.str() << endl;
    }
    catch (const bzip2_error& exception)
    {
        cout << "catchblock" << endl;
        cout << exception.what() << endl;
        int error = exception.error();
        if (error == bzip2::data_error)
        {
            cout << "compressed data stream is corrupted";
        }
        else if (error == bzip2::data_error_magic)
        {
            cout << "compressed data stream does not begin with the 'magic' sequence 'B' 'Z' 'h'";
        }
        else if (error == bzip2::config_error)
        {
            cout << "libbzip2 has been improperly configured for the current platform";
        }
        else
        {
            cout << "Error: " << error;
        }
        cout << endl;
    }
}

运行时输出如下:

dev4@sun-desktop: ~/readerwriter美元。/test1gcc-4.7.2。txt0000644000175100001440000000004312547435102011603 0ustar dev4userhello这是一个测试文件。

感谢

Hello之前的字符是什么?为什么要打印文件名?

如何去掉那些额外的值。并且只打印文件的内容:

你好这是一个测试文件。

谢谢

不能。

这些不是"额外值"。

  • 如果你不想要tar文件,就不要使用tar文件。

    使用bzip2来压缩单个文件

  • 如果输入是tar存档文件,使用tar提取。

    Boost does not支持tar存档