Freigeben über


ZipArchive Klasse

Definition

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

public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
    interface IDisposable
Public Class ZipArchive
Implements 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.

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("========================");
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Using zipToOpen As FileStream = New FileStream("c:\users\exampleuser\release.zip", FileMode.Open)
            Using archive As ZipArchive = New ZipArchive(zipToOpen, ZipArchiveMode.Update)
                Dim readmeEntry As ZipArchiveEntry = archive.CreateEntry("Readme.txt")
                Using writer As StreamWriter = New StreamWriter(readmeEntry.Open())
                    writer.WriteLine("Information about this package.")
                    writer.WriteLine("========================")
                End Using
            End Using
        End Using
    End Sub

End Module

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

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);
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = ".\result.zip"

        Console.WriteLine("Provide path where to extract the zip file:")
        Dim extractPath As String = 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 Not extractPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal) Then
            extractPath += Path.DirectorySeparatorChar
        End If

        Using archive As ZipArchive = ZipFile.OpenRead(zipPath)
            For Each entry As ZipArchiveEntry In archive.Entries
                If entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then

                    ' Gets the full path to ensure that relative segments are removed.
                    Dim destinationPath As String = 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) Then 
                        entry.ExtractToFile(destinationPath)
                    End If

                End If
            Next
        End Using
    End Sub

End Module

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.

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);
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = "c:\users\exampleuser\end.zip"
        Dim extractPath As String = "c:\users\exampleuser\extract"
        Dim newFile As String = "c:\users\exampleuser\NewFile.txt"

        Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update)
            archive.CreateEntryFromFile(newFile, "NewEntry.txt", CompressionLevel.Fastest)
            archive.ExtractToDirectory(extractPath)
        End Using
    End Sub

End Module

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:

Weitere Informationen