Comment Télécharger et Extraire des Fichiers Gzippés avec C#

Dans le monde axé sur les données d’aujourd’hui, il se peut que vous ayez régulièrement besoin de télécharger et de traiter des fichiers. Une tâche courante consiste à télécharger des fichiers gzippés, mais cela peut être délicat en C# si vous n’êtes pas familier avec les bonnes méthodes. Ce guide vous expliquera les étapes pour télécharger et extraire un fichier gzippé de manière programmatique en utilisant C#.

Le Problème : Télécharger des Fichiers Gzippés

De nombreux sites web hébergent des données dans des formats compressés comme gzip pour économiser de la bande passante. Par exemple, l’URL http://data.dot.state.mn.us/dds/det_sample.xml.gz pointe vers un fichier XML gzippé. Si vous avez besoin de télécharger, extraire et enregistrer ce fichier sur votre disque, vous devez savoir comment procéder efficacement en C#.

La Solution : Guide Étape par Étape

1. Télécharger le Fichier Gzippé

Pour télécharger un fichier gzippé, vous pouvez utiliser les classes WebRequest ou WebClient disponibles dans .NET. Ci-dessous un exemple utilisant la classe WebClient pour sa simplicité.

using System.Net;

string url = "http://data.dot.state.mn.us/dds/det_sample.xml.gz";
string savePath = @"C:\path\to\your\det_sample.xml.gz";

using (WebClient webClient = new WebClient())
{
    webClient.DownloadFile(url, savePath);
}
  • Explication:
    • WebClient est utilisé pour télécharger des fichiers depuis le web.
    • La méthode DownloadFile prend l’URL du fichier gzippé et le chemin local où vous souhaitez l’enregistrer.

2. Extraire le Contenu Gzippé

Après avoir téléchargé le fichier gzippé, la prochaine étape consiste à extraire son contenu. Pour cela, nous utiliserons la classe GZipStream.

Exemple de Code de Décompression

using System.IO;
using System.IO.Compression;

string gzippedFilePath = @"C:\path\to\your\det_sample.xml.gz";
string outputFilePath = @"C:\path\to\your\det_sample.xml";

using (FileStream fInStream = new FileStream(gzippedFilePath, FileMode.Open, FileAccess.Read))
{
    using (GZipStream zipStream = new GZipStream(fInStream, CompressionMode.Decompress))
    {
        using (FileStream fOutStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
        {
            byte[] tempBytes = new byte[4096];
            int bytesRead;
            while ((bytesRead = zipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
            {
                fOutStream.Write(tempBytes, 0, bytesRead);
            }
        }
    }
}
  • Explication:
    • Tout d’abord, créez un FileStream pour lire le fichier gzippé.
    • Ensuite, enveloppez ce flux dans un GZipStream pour gérer la décompression.
    • Enfin, créez un autre FileStream pour écrire le contenu décompressé dans un nouveau fichier.

Résumé des Étapes

  1. Téléchargez le fichier en utilisant WebClient.
  2. Ouvrez le fichier gzippé avec un FileStream.
  3. Enveloppez-le dans un GZipStream pour la décompression.
  4. Écrivez la sortie dans un nouveau fichier à l’aide d’un autre FileStream.

En suivant ces étapes, vous pouvez facilement automatiser le processus de téléchargement et d’extraction de fichiers gzippés en utilisant C#.

Conclusion

Gérer des fichiers gzippés en C# est simple une fois que vous comprenez les classes et méthodes nécessaires. Avec juste quelques lignes de code, vous pouvez efficacement télécharger et extraire tout contenu gzippé dont vous avez besoin.

Pour des lectures supplémentaires sur la compression et la gestion des fichiers en C#, envisagez de consulter la documentation officielle de Microsoft.