Arbeiten mit ZIP/Archiven in C# (.NET): vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 SharpZipLib


Oder über die .NET CLI:



dotnet add package SharpZipLib


Erstellen 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()) !=

Empfehlungen