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 SharpZipLibOu via l'interface CLI .NET :
dotnet add package SharpZipLibCré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()) != Aussi dans la bibliothèque
Nodemailer JavaScript (Node.js) : guide complet avec exemples
Bibliothèques WebSocket TypeScript : ws, Socket.IO, uWebSockets.js
Tests en C++ : aperçu des frameworks et outils (Google Test, Catch2, doctest)
Programmation réactive en Swift : Combine et RxSwift pour iOS/macOS