2015-07-09 5 views
-2

У меня есть файл txt: gcc-4.7.2.txt: с данными: Hello Это тестовый файл. Спасибо: сжимаются как GCC-4.7.2.tar.bz2как избавиться от лишних значений при использовании boost :: bzip2_decompressor()

Теперь я запускаю следующий код:

#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 @ ВС-рабочий стол: ~/readerwriter $ ./test1 gcc-4.7.2.txt0000644000175100001440000000004312547435102011603 0ustar dev4usersHello Это тестовый файл.

Thanks

Каковы символы перед Hello? почему он печатает имя файла?

Как избавиться от этих дополнительных значений. и только печатать содержимое файла:

Hello Это тестовый файл.

Thanks

+1

Не размещать дубликаты http://stackoverflow.com/q/31317488/85371 – sehe

+0

-1 Нет необходимости перепечатывать на вопрос, который уже был дан ответ. – caps

+0

Это не просто дубликат, это плагиат. – Mysticial

ответ

0

Вы не можете.

Это не «дополнительные значения».

  • Если вы не хотите архив tar, просто не используйте tar.

    Вместо этого используйте bzip2 сжать один файл

  • Если вход архив деготь, экстракт с tar.

    подталкивание делает не поддержки битуминозных архивов

+0

хорошо, поэтому я сжал с помощью bzip2 hello.txt; Он становится hello.txt.bz2. Теперь, когда я использую вышеуказанный код, он не печатает лишние значения (я понимаю, что это содержимое файла); нет команды во время работы ./test1; он удаляет это начальное значение. что-то вроде «./test1 | tar -x», эта команда ничего не печатает. Также как я могу удалить поток cout из копии (in, cout) и создать собственный поток записи, такой как copy (in, abc) и всякий раз, когда я хочу распечатать контент или прочитать содержимое, которое я использую cout < Sumit

+0

есть. Это только имена файлов. Измените их, например. 'mv hello.txt.bz2 i_prefer_little_ponies.magic.bin' или, действительно:' bzip2 hello.txt> my_filename.wow' – sehe

Смежные вопросы