Arbeiten mit ZIP-Archiven in C# (.NET)
In der modernen Entwicklung auf der .NET-Plattform ist die Arbeit mit Archiven eine häufig vorkommende Aufgabe. Ob es sich um das Packen von Logs, das Erstellen von Backups oder die Datenübertragung über das Netzwerk handelt – die Fähigkeit, Dateien effizient zu komprimieren und zu entpacken, ist für jeden C#-Entwickler notwendig. In diesem Artikel werden wir zwei Hauptansätze im Detail besprechen: den integrierten Namespace System.IO.Compression und die Drittanbieter-Bibliothek SharpZipLib.
Integrierte .NET-Mittel: System.IO.Compression
Ab .NET Framework 4.5 bietet die Plattform eine native API für die Arbeit mit ZIP-Archiven. Die wichtigsten Klassen befinden sich im Namespace System.IO.Compression.
Erstellen eines ZIP-Archivs
Zum Erstellen eines Archivs wird die Klasse ZipArchive in Verbindung mit ZipFile verwendet:
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("Archiv erstellt: " + zipPath);Extrahieren eines Archivs
Das Entpacken erfolgt analog – mit der Methode ExtractToDirectory:
string extractPath = @"C:\\Data\\Extracted";ZipFile.ExtractToDirectory(zipPath, extractPath);Console.WriteLine("Archiv extrahiert nach: " + extractPath);Arbeiten mit einzelnen Einträgen
Für eine feinere Kontrolle verwenden Sie ZipArchive direkt:
using (FileStream zipStream = new FileStream(zipPath, FileMode.Open))using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Read)){ foreach (ZipArchiveEntry entry in archive.Entries) { Console.WriteLine($"Datei: {entry.FullName}, Größe: {entry.Length} Bytes"); // Extrahieren einer bestimmten Datei entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true); }}Bibliothek SharpZipLib
SharpZipLib ist eine leistungsstarke Open-Source-Drittanbieter-Bibliothek, die erweiterte Funktionen im Vergleich zu den integrierten Mitteln bietet. Sie unterstützt mehr Formate (GZip, BZip2, Tar) und bietet eine flexiblere Kontrolle über den Komprimierungsprozess.
Installation von SharpZipLib
Installieren Sie die Bibliothek über den NuGet Package Manager:
Install-Package SharpZipLibOder über die .NET CLI:
dotnet add package SharpZipLibErstellen eines Archivs mit 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); // Maximale Komprimierung (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(); }}Extrahieren eines Archivs mit 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()) != Auch in der Bibliothek
Event Bus und das Observer-Pattern in Kotlin: Leitfaden mit Beispielen
Dependency Injection Container für Kotlin: Koin vs Kodein vs Dagger
Bouncy Castle Java: Vollständige Anleitung mit Beispielen
Prometheus-Metriken in Node.js: Die Bibliothek prom-client für das Monitoring