Lire un fichier compressé

Problème

Vous voulez lire un fichier compressé au format gz ou bz2.

Solution

S’il s’agit d’un fichier au format gz, utilisez gzopen() pour ouvrir le fichier, puis au choix gzread() ou gzgets() pour le lire, et gzclose() pour le fermer.

S’il s’agit d’un fichier au format bz2, utilisez fopen() suivi de BZ2_bzReadOpen() pour ouvrir le fichier, puis BZ2_bzRead() pour le lire, et BZ2_bzReadClose() suivi de fclose() pour le fermer.

Discussion

La lecture d’un fichier compressé ne diffère de la lecture d’un fichier normal que par les fonctions (de prototypes fortement inspirés de ceux de fopen()) appelées pour le lire. La recette "Lire un fichier" (chapitre "Contenu des fichiers") est donc tout à fait applicable, même pour un fichier compressé, à condition d’utiliser les fonctions correspondantes de zlib pour ouvrir, lire et fermer le fichier. La fonction de l’exemple ci-dessous affiche le contenu du fichier tel que le ferait le programme zcat.


int 
zcat (const char *filename) 
{ 
  gzFile gzfh = NULL; 
  char buffer[BUF_SIZE]; 
  int n; 
  int r = 0; 
 
  if (NULL == (gzfh = gzopen (filename, "rb"))) 
    { 
      fprintf (stderr, "Impossible d'ouvrir '%s'\n", filename); 
      return (-1); 
    } 
  while (0 < (n = gzread (gzfh, buffer, BUF_SIZE - 1))) 
    { 
      int l; 
      buffer[n] = '\0'; 
/* Remplace les octets...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Introduction
Suivant
Écrire un fichier compressé