ZIP-Archive in C# erstellen: Ein Überblick über ZipFile.CreateFromDirectory und seine Überladungen

.NET bietet komfortable Möglichkeiten, um Verzeichnisse schnell und einfach zu ZIP-Archiven zusammenzupacken. Die statische Klasse ZipFile aus dem Namespace System.IO.Compression stellt dafür mehrere Überladungen der Methode CreateFromDirectory bereit. In diesem Beitrag lernst du die verschiedenen Varianten, deren Parameter und Anwendungsfälle kennen.

Inhalt

Voraussetzungen

Um die folgenden Beispiele nutzen zu können, benötigst du mindestens .NET Framework 4.5 oder eine moderne .NET (Core)-Version. Die Pfade sind im Windows-Stil definiert. Stelle sicher, dass du folgende Namespaces eingebunden hast:

using System.IO;     // bei neueren .Net/C# Versionen automatisch eingebunden
using System.IO.Compression;
using System.Text;

1. CreateFromDirectory(String, Stream)

Kurzbeschreibung:
Erzeugt ein ZIP-Archiv in einem angegebenen Stream aus allen Dateien und Unterverzeichnissen eines Quellverzeichnisses.

Wann nutzen?
Wenn du das ZIP-Archiv nicht direkt als Datei, sondern z. B. in einen MemoryStream schreiben möchtest oder den generierten Stream weiterverarbeiten willst.

Beispielcode:

string sourceDir = @"C:\Pfad\Zu\Meinem\Verzeichnis";
using (MemoryStream ms = new MemoryStream())
{
    ZipFile.CreateFromDirectory(sourceDir, ms);
    // Nun kannst du ms z. B. in eine Datei schreiben:
    File.WriteAllBytes(@"C:\Ziel\Archive.zip", ms.ToArray());
}

2. CreateFromDirectory(String, String)

Kurzbeschreibung:
Erzeugt eine ZIP-Datei an einem angegebenen Dateipfad aus allen Dateien und Unterverzeichnissen eines Quellverzeichnisses.

Wann nutzen?
Dies ist die einfachste und häufigste Variante, wenn du schnell ein komplettes Verzeichnis in eine ZIP-Datei packen willst, ohne weitere Konfiguration.

Beispielcode:

string sourceDir = @"C:\Quellverzeichnis";
string destinationZip = @"C:\Ziel\Backup.zip";
ZipFile.CreateFromDirectory(sourceDir, destinationZip);

3. CreateFromDirectory(String, Stream, CompressionLevel, Boolean)

Kurzbeschreibung:
Erzeugt ein ZIP-Archiv in einem angegebenen Stream aus einem Quellverzeichnis, mit einer vorgegebenen Kompressionsstufe und optionaler Einbeziehung des Basisverzeichnisses.

Parameter:

  • CompressionLevel (z. B. CompressionLevel.Optimal, Fastest, NoCompression, SmallestSize)
  • includeBaseDirectory (true/false) – true bedeutet, dass die Verzeichnisstruktur inklusive des obersten Verzeichnisses in der ZIP-Datei abgebildet wird

Beispielcode:

string sourceDir = @"C:\Verzeichnis";
using (FileStream fs = new FileStream(@"C:\Ziel\ArchivKomprimiert.zip", FileMode.Create))
{
    ZipFile.CreateFromDirectory(sourceDir, fs, CompressionLevel.Optimal, true);
}

4. CreateFromDirectory(String, String, CompressionLevel, Boolean)

Kurzbeschreibung:
Erzeugt eine ZIP-Datei an einem angegebenen Dateipfad aus einem Quellverzeichnis, mit einer vorgegebenen Kompressionsstufe und optionaler Einbeziehung des Basisverzeichnisses.

Beispielcode:

string sourceDir = @"C:\Daten";
string destinationZip = @"C:\Ziel\DatenArchiv.zip";
ZipFile.CreateFromDirectory(sourceDir, destinationZip, CompressionLevel.Fastest, false);

Hier werden die Dateien so schnell wie möglich komprimiert (Fastest) und das oberste Quellverzeichnis nicht in die ZIP-Struktur übernommen (false).


5. CreateFromDirectory(String, Stream, CompressionLevel, Boolean, Encoding)

Kurzbeschreibung:
Erzeugt ein ZIP-Archiv in einem angegebenen Stream aus einem Quellverzeichnis, mit einer vorgegebenen Kompressionsstufe, einer bestimmten Zeichencodierung für Eintragsnamen und Kommentare sowie optionaler Einbeziehung des Basisverzeichnisses.

Wann nutzen?
Wenn Sonderzeichen in Dateinamen oder spezielle Encoding-Anforderungen bestehen (z. B. bei internationalisierten Projekten).

Beispielcode:

string sourceDir = @"C:\International\Verzeichnis";
using (FileStream fs = new FileStream(@"C:\Ziel\ArchivMitEncoding.zip", FileMode.Create))
{
    ZipFile.CreateFromDirectory(
        sourceDir,
        fs,
        CompressionLevel.Optimal,
        false,
        Encoding.UTF8
    );
}

6. CreateFromDirectory(String, String, CompressionLevel, Boolean, Encoding)

Kurzbeschreibung:
Erzeugt eine ZIP-Datei an einem angegebenen Dateipfad aus einem Quellverzeichnis, mit einer vorgegebenen Kompressionsstufe, einer bestimmten Zeichencodierung sowie optionaler Einbeziehung des Basisverzeichnisses.

Beispielcode:

string sourceDir = @"C:\International\Daten";
string destinationZip = @"C:\Ziel\DatenArchivMitEncoding.zip";
ZipFile.CreateFromDirectory(
    sourceDir,
    destinationZip,
    CompressionLevel.Optimal,
    true,
    Encoding.UTF8
);

Fazit

Die unterschiedlichen Überladungen von ZipFile.CreateFromDirectory bieten einen hohen Grad an Flexibilität. Von der Standardvariante ohne weitere Optionen bis hin zum Einsatz eines Stream-Objekts, verschiedenen Kompressionsstufen und einer expliziten Zeichencodierung ist für nahezu jeden Anwendungsfall etwas dabei.

Wenn du also das nächste Mal ein Backup erstellst, Dateien archivierst oder deine Anwendung Logfiles sammelt, kannst du dich auf die praktische API von ZipFile verlassen.