J'utilise le type filetering_istream pour enregistrer les informations dans un fichier décompressé en utilisant 'boost/iostreams/filtering_stream.hpp'. Mais je veux le lancer dans le type ifstream. Y at-il un moyen de le faire? Grand merci!Convertit une variable de type filtering_istream en type ifstream?
Le code est le suivant:
#include <istream>
#include <fstream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
int main(){
std::ifstream file("test_data.dat.gz");
boost::iostreams::filtering_istream in;
in.push(boost::iostreams::gzip_decompressor());
in.push(file);
/* add code to convert filtering_istream 'in' into ifstream 'pfile' */
/* It seems that the following code returns a pointer NULL */
// std::ifstream* pfile = in.component<std::ifstream>(1);
return 0;
}
Après avoir essayé boost :: ref et boost :: emballage proposé par zett42, le ifstream fonctionne vraiment. Le seul problème est qu'il ne donne pas les phrases voulues.
Dans mon texte de fichier .gz, j'ai écrit:
THIS IS A DATA FILE!
8 plus 8 is 16
Mais en utilisant le ifstream, je me suis:
is_open: 1
\213<\373Xtest_data.dat\361\360V"G\307G7OWE.\205\202\234\322b\205\314bC3.\327+>\314$
Je ne sais pas ce qui est arrivé ici, et puis-je faire quelque chose pour le récupérer?
Si vous utilisez 'ifstream', vous lirez les données * compressées *. Peut-être que j'ai mal compris votre problème complètement. Si vous voulez lire les données non compressées, vous lisez simplement 'in'. Pas besoin de "jeter" quoi que ce soit alors. – zett42