boost::iostreams の zlib フィルターで gzip ヘッダーを無視するのに問題があります... zlib_param の default_noheader を true に設定してから zlib_decompressor() を呼び出すと、「data_error」エラー (ヘッダー チェックが正しくない) が発生するようです。これは、zlib がまだヘッダーを見つけることを期待していることを示しています。ヘッダーなしでデータを解凍するために boost::iostreams::zlib を入手した人はいますか? 2 バイトのヘッダーを持たないファイル/ストリームを読み取って解凍できる必要があります。どんな援助でも大歓迎です。
これは、boost::iostreams::zlib ドキュメントで提供されているサンプル プログラムの修正版です。
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>
int main(int argc, char** argv)
{
using namespace std;
using namespace boost::iostreams;
ifstream ifs(argv[1]);
ofstream ofs("out");
boost::iostreams::filtering_istreambuf in;
zlib_params p(
zlib::default_compression,
zlib::deflated,
zlib::default_window_bits,
zlib::default_mem_level,
zlib::default_strategy,
true
);
try
{
in.push(zlib_decompressor(p));
in.push(ifs);
boost::iostreams::copy(in, ofs);
ofs.close();
ifs.close();
}
catch(zlib_error& e)
{
cout << "zlib_error num: " << e.error() << endl;
}
return 0;
}
テスト データに問題がないことはわかっています。テストファイルで gzread() を呼び出す小さなプログラムを作成しました。正常に解凍されました...なぜこれが機能しないのか混乱しています。
前もって感謝します。
-氷