Travailler avec les archives ZIP en C# (.NET) : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec les archives ZIP en C# (.NET)



Dans le développement moderne sur la plateforme .NET, travailler avec des archives est l'une des tâches courantes. Qu'il s'agisse de compresser des journaux, de créer des sauvegardes ou de transférer des données sur le réseau, savoir compresser et décompresser efficacement des fichiers est essentiel pour tout développeur C#. Dans cet article, nous allons détailler deux approches principales : l'espace de noms intégré System.IO.Compression et la bibliothèque tierce SharpZipLib.



Outils intégrés de .NET : System.IO.Compression



Depuis .NET Framework 4.5, la plateforme fournit une API native pour travailler avec les archives ZIP. Les classes principales se trouvent dans l'espace de noms System.IO.Compression.



Création d'une archive ZIP



Pour créer une archive, on utilise la classe ZipArchive avec ZipFile :



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

string sourceDirectory = @"C:\\Data\\Reports";string zipPath = @"C:\\Archives\\reports.zip";

if (File.Exists(zipPath)) File.Delete(zipPath);

ZipFile.CreateFromDirectory(sourceDirectory, zipPath);Console.WriteLine("Archive créée : " + zipPath);


Extraction d'une archive



La décompression s'effectue de manière similaire avec la méthode ExtractToDirectory :



string extractPath = @"C:\\Data\\Extracted";ZipFile.ExtractToDirectory(zipPath, extractPath);Console.WriteLine("Archive extraite dans : " + extractPath);


Travailler avec des entrées individuelles



Pour un contrôle plus fin, utilisez ZipArchive directement :



using (FileStream zipStream = new FileStream(zipPath, FileMode.Open))using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Read)){    foreach (ZipArchiveEntry entry in archive.Entries)    {        Console.WriteLine($"Fichier : {entry.FullName}, Taille : {entry.Length} octets");                // Extraction d'un fichier spécifique        entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true);    }}


Bibliothèque SharpZipLib



SharpZipLib est une puissante bibliothèque tierce open source offrant des fonctionnalités avancées par rapport aux outils intégrés. Elle prend en charge davantage de formats (GZip, BZip2, Tar) et offre un contrôle plus flexible sur le processus de compression.



Installation de SharpZipLib



Installez la bibliothèque via le gestionnaire de packages NuGet :



Install-Package SharpZipLib


Ou via l'interface CLI .NET :



dotnet add package SharpZipLib


Création d'une archive avec SharpZipLib



using ICSharpCode.SharpZipLib.Zip;using ICSharpCode.SharpZipLib.Core;

string outputZip = @"C:\\Archives\\backup.zip";string[] filesToZip = Directory.GetFiles(@"C:\\Data\\Files", "*.*", SearchOption.AllDirectories);

using (FileStream fsOut = File.Create(outputZip))using (ZipOutputStream zipStream = new ZipOutputStream(fsOut)){ zipStream.SetLevel(9); // Compression maximale (0-9)

foreach (string filename in filesToZip) { FileInfo fi = new FileInfo(filename); string entryName = ZipEntry.CleanName(fi.Name); ZipEntry newEntry = new ZipEntry(entryName); newEntry.DateTime = fi.LastWriteTime; newEntry.Size = fi.Length;

zipStream.PutNextEntry(newEntry);

byte[] buffer = new byte[4096]; using (FileStream fsInput = File.OpenRead(filename)) { StreamUtils.Copy(fsInput, zipStream, buffer); } zipStream.CloseEntry(); }}


Extraction d'une archive avec SharpZipLib



string inputZip = @"C:\\Archives\\backup.zip";string outputDir = @"C:\\Data\\Restored";

using (FileStream fsIn = File.OpenRead(inputZip))using (ZipInputStream zipStream = new ZipInputStream(fsIn)){ ZipEntry entry; while ((entry = zipStream.GetNextEntry()) !=

Recommendations