Auf Englisch lesen

Freigeben über


ZipArchive Klasse

Definition

Stellt ein Paket komprimierter Dateien im Zip-Archiv-Format dar.

C#
public class ZipArchive : IDisposable
Vererbung
ZipArchive
Implementiert

Hinweise

Die Methoden zum Bearbeiten von ZIP-Archiven und deren Dateieinträgen sind auf drei Klassen verteilt: ZipFile, ZipArchiveund ZipArchiveEntry.

Beschreibung Verwendung
Create eines ZIP-Archivs aus einem Verzeichnis ZipFile.CreateFromDirectory
Extrahieren des Inhalts eines ZIP-Archivs in ein Verzeichnis ZipFile.ExtractToDirectory
Hinzufügen neuer Dateien zu einem vorhandenen ZIP-Archiv ZipArchive.CreateEntry
Abrufen einer Datei aus einem ZIP-Archiv ZipArchive.GetEntry
Abrufen aller Dateien aus einem ZIP-Archiv ZipArchive.Entries
Öffnen eines Datenstroms für eine einzelne Datei, die in einem ZIP-Archiv enthalten ist ZipArchiveEntry.Open
Löschen einer Datei aus einem ZIP-Archiv ZipArchiveEntry.Delete

Wenn Sie einen neuen Eintrag erstellen, wird die Datei komprimiert und dem ZIP-Paket hinzugefügt. Mit CreateEntry der -Methode können Sie beim Hinzufügen des Eintrags eine Verzeichnishierarchie angeben. Sie fügen den relativen Pfad des neuen Eintrags in das ZIP-Paket ein. Wenn Sie beispielsweise einen neuen Eintrag mit dem relativen Pfad von AddedFolder\NewFile.txt erstellen, wird eine komprimierte Textdatei in einem Verzeichnis namens AddedFolder erstellt.

Wenn Sie auf die System.IO.Compression.FileSystem Assembly in Ihrem Projekt verweisen, können Sie auf vier Erweiterungsmethoden (aus der ZipFileExtensions -Klasse) für die ZipArchive -Klasse zugreifen: CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String)und ExtractToDirectory(ZipArchive, String, Boolean) (verfügbar in .NET Core 2.0 und höheren Versionen). Mit diesen Erweiterungsmethoden können Sie den Inhalt des Eintrags in eine Datei komprimieren und dekomprimieren. Die System.IO.Compression.FileSystem Assembly ist für Windows 8.x Store-Apps nicht verfügbar. In Windows 8.x Store-Apps können Sie Dateien mithilfe der DeflateStream - oder GZipStream -Klasse komprimieren oder die Windows-Runtime Typen Compressor und Decompressorverwenden.

Beispiele

Das erste Beispiel zeigt, wie Sie einen neuen Eintrag erstellen und mithilfe eines Datenstroms in diesen schreiben.

C#
using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.zip", FileMode.Open))
            {
                using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
                {
                    ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
                    using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
                    {
                            writer.WriteLine("Information about this package.");
                            writer.WriteLine("========================");
                    }
                }
            }
        }
    }
}

Das folgende Beispiel zeigt, wie Sie ein ZIP-Archiv öffnen und die Auflistung von Einträgen durchlaufen.

C#
using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string zipPath = @".\result.zip";

        Console.WriteLine("Provide path where to extract the zip file:");
        string extractPath = Console.ReadLine();

        // Normalizes the path.
        extractPath = Path.GetFullPath(extractPath);

        // Ensures that the last character on the extraction path
        // is the directory separator char.
        // Without this, a malicious zip file could try to traverse outside of the expected
        // extraction path.
        if (!extractPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
            extractPath += Path.DirectorySeparatorChar;

        using (ZipArchive archive = ZipFile.OpenRead(zipPath))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                {
                    // Gets the full path to ensure that relative segments are removed.
                    string destinationPath = Path.GetFullPath(Path.Combine(extractPath, entry.FullName));

                    // Ordinal match is safest, case-sensitive volumes can be mounted within volumes that
                    // are case-insensitive.
                    if (destinationPath.StartsWith(extractPath, StringComparison.Ordinal))
                        entry.ExtractToFile(destinationPath);
                }
            }
        }
    }
}

Das dritte Beispiel zeigt, wie Sie mithilfe von Erweiterungsmethoden einen neuen Eintrag in einem ZIP-Archiv aus einer vorhandenen Datei erstellen und den Archivinhalt extrahieren. Sie müssen auf die System.IO.Compression.FileSystem Assembly verweisen, um den Code auszuführen.

C#
using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string zipPath = @"c:\users\exampleuser\start.zip";
            string extractPath = @"c:\users\exampleuser\extract";
            string newFile = @"c:\users\exampleuser\NewFile.txt";

            using (ZipArchive archive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
            {
                archive.CreateEntryFromFile(newFile, "NewEntry.txt");
                archive.ExtractToDirectory(extractPath);
            }
        }
    }
}

Konstruktoren

ZipArchive(Stream)

Initialisiert eine neue Instanz der ZipArchive-Klasse aus dem angegebenen Stream.

ZipArchive(Stream, ZipArchiveMode)

Initialisiert eine neue Instanz der ZipArchive-Klasse aus dem angegebenen Stream und mit dem angegebenen Modus.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Initialisiert eine neue Instanz der ZipArchive-Klasse für den angegebenen Stream und den angegebenen Modus und lässt den Stream optional geöffnet.

ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

Initialisiert eine neue Instanz der ZipArchive-Klasse für den angegebenen Stream und den angegebenen Modus und verwendet dabei die angegebene Codierung für Eintragsnamen und lässt den Stream optional geöffnet.

Eigenschaften

Comment

Ruft den optionalen Archivkommentar ab oder legt diese fest.

Entries

Ruft die Auflistung von Einträgen ab, die das ZIP-Archiv momentan enthält.

Mode

Ruft einen Wert ab, der den Typ der Aktion beschreibt, die das ZIP-Archiv für Einträge ausführen kann.

Methoden

CreateEntry(String)

Erstellt einen leeren Eintrag, der den angegebenen Pfad und Eintragsnamen im ZIP-Archiv Ebene verwendet.

CreateEntry(String, CompressionLevel)

Erstellt einen leeren Eintrag, der den angegebenen Eintragsnamen und die Komprimierung im ZIP-Archiv Ebene verwendet.

Dispose()

Gibt alle von der aktuellen Instanz der ZipArchive-Klasse verwendeten Ressourcen frei.

Dispose(Boolean)

Wird von den Dispose() und Finalize()-Methoden aufgerufen, um die nicht verwalteten Ressourcen freizugeben, die von der aktuellen Instanz der ZipArchive-Klasse verwendet werden, und beendet optional das Schreiben ins Archiv und gibt die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetEntry(String)

Ruft einen Wrapper für den angegebenen Eintrag im Zip-Archiv ab.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Erweiterungsmethoden

CreateEntryFromFile(ZipArchive, String, String)

Archiviert eine Datei durch Komprimieren und Hinzufügen zum ZIP-Archiv.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Archiviert eine Datei durch Komprimieren mithilfe der angegebenen Komprimierungsebene und Hinzufügen zum ZIP-Archiv.

ExtractToDirectory(ZipArchive, String)

Extrahiert alle Dateien im ZIP-Archiv in ein Verzeichnis im Dateisystem.

ExtractToDirectory(ZipArchive, String, Boolean)

Extrahiert alle Dateien im Archiv in ein Verzeichnis im Dateisystem.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Weitere Informationen