J'ai du mal à obtenir boost :: Le filtre zlib de iostreams ignore les en-têtes gzip ... Il semble que définir default_noheader de zlib_param sur true, puis appeler zlib_decompressor() produit l'erreur 'data_error' (vérification incorrecte de l'en-tête). Cela me dit que zlib s'attend toujours à trouver des en-têtes. Est-ce que quelqu'un a boosté :: iostreams :: zlib pour décompresser des données sans en-têtes? Je dois être capable de lire et de décompresser les fichiers/flux qui n'ont pas l'en-tête à deux octets. Toute aide sera grandement appréciée.boost :: iostreams :: zlib :: default_noheader semble être ignoré
est ici une version modifiée du programme d'échantillon fourni par le boost :: iostreams :: Documentation 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;
}
Je sais que mes données de test ne sont pas mauvais; J'ai écrit un petit programme pour appeler gzread() sur le fichier de test; il est décompressé avec succès ... donc je suis confus quant à savoir pourquoi cela ne fonctionne pas.
Merci d'avance.
-Glace