Comment puis-je lire ligne par ligne à l'aide de Boost IOStreams' interface pour les fichiers Gzip?

J'ai réussi à intégrer le coup de pouce Iostream Api pour la lecture des fichiers zippés. J'ai suivi la documentation en boost page et les suivantes code de la mesure:

std::stringstream outStr;  
ifstream file("file.gz", ios_base::in | ios_base::binary);  
try {  
    boost::iostreams::filtering_istreambuf in;  
    in.push(boost::iostreams::gzip_decompressor());  
    in.push(file);  
    boost::iostreams::copy(in, outStr);  
}  
catch(const boost::iostreams::gzip_error& exception) {  
    int error = exception.error();  
    if (error == boost::iostreams::gzip::zlib_error) {  
       //check for all error code    
    }   
}  

Le code fonctionne très bien (donc s'il vous plaît ignorer les éventuelles fautes de frappe. et les erreurs ci-dessus :)).

  1. Ressemble le code ci-dessus va lire le complet, le fichier et le stocker dans la mémoire lors de la création du filtering_istreambuf. C'est vrai que, de mon enquête, il ressemble tellement à moi? Si le fichier est lu en mémoire, ce code peut être un problème pour les fichiers de grande taille (qui est ce que je m'occupe).
  2. Mon code actuel lit le format à l'aide de gzgets API de la librairie zlib ligne par ligne. Est il possible de le faire ligne par ligne de lecture à l'aide de boost Api?

OriginalL'auteur cppcoder | 2011-06-21