9

Logparser アプリケーションを作成しましたが、.gz ファイルの解凍を実装したいと考えています。動作するように見えるboost::iostreamsとzlibで試しましたが、圧縮ファイルから取得した入力を処理する方法がわかりません。

これが私がすることです:

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);

ソースファイルの末尾が .gz の場合、このコードが実行されます。最後の行は、解凍されたファイル ストリームを正しく cout に出力します。

しかし、解凍されたファイルから行ごとに取得するにはどうすればよいですか? 私のプログラムは、圧縮されていない場合、 getline(input, transfer) を使用して入力ストリームから行を読み取ります。

解凍したファイルから同じように読みたいのですが、どうすれば改行を取得できますか?

ブーストのデキュメンテーションは、これに関してはあまり役に立ちませんでした。

前もって感謝します!

4

1 に答える 1

11

わかりました。std::istream を作成し、バッファへの参照を渡す必要がありました。

std::istream incoming(&in);
getline(incoming, transfer);
于 2011-03-28T20:46:04.603 に答える