ZipArchive Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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. |