2011-03-28 2 views
6

Logparser 응용 프로그램을 작성 했으므로 .gz 파일의 압축을 구현하려고합니다. 내가 boost :: iostreams 및 zlib 작동하는 것, 시도했지만 압축 된 파일을 얻을 입력을 처리하는 방법을 모르겠습니다.boost :: filtering_streambuf with gzip_decompressor(), 파일에서 줄 단위로 액세스하는 방법

는 여기에 내가 할 수있는 작업은 다음과 같습니다

input.open(p.source_at(i).c_str(), ios_base::in | ios_base::binary); 
boost::iostreams::filtering_streambuf<boost::iostreams::input> in; 
in.push(boost::iostreams::gzip_decompressor()); 
in.push(input); 
boost::iostreams::copy(in, cout); 

이 코드가 실행될 때, 나의은 SourceFile이 종료 된 .gz이있는 경우. 마지막 줄은 감압 된 파일 스트림을 정확하게 출력합니다.

그러나 어떻게 압축 해제 된 파일에서 한 줄씩 가져올 수 있습니까? 내 프로그램은 압축되지 않은 경우 getline (input, transfer)을 사용하여 입력 스트림에서 행을 읽습니다.

이제 압축 해제 된 파일에서 같은 방식으로 읽으려고하지만 어떻게하면 새 줄을 가져올 수 있습니까?

부스트 decumentation은 이것으로 많은 도움이되지 못했습니다.

미리 감사드립니다.

답변

8

좋아, 알아 냈어. std :: istream을 만들고 버퍼에 대한 참조를 전달해야했습니다.

std::istream incoming(&in); 
getline(incoming, transfer);