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-Archivformat dar.
public ref class ZipArchive : IDisposable
public ref class ZipArchive : IAsyncDisposable, IDisposable
public class ZipArchive : IDisposable
public class ZipArchive : IAsyncDisposable, IDisposable
type ZipArchive = class
interface IDisposable
type ZipArchive = class
interface IAsyncDisposable
interface IDisposable
Public Class ZipArchive
Implements IDisposable
Public Class ZipArchive
Implements IAsyncDisposable, IDisposable
- Vererbung
-
ZipArchive
- Implementiert
Hinweise
Die Methoden zum Bearbeiten von ZIP-Archiven und deren Dateieinträgen sind in drei Klassen verteilt: ZipFile, , ZipArchiveund ZipArchiveEntry.
| To | Verwendung |
|---|---|
| Erstellen 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 in einer einzelnen 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 der CreateEntry 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. Beispielsweise erstellt das Erstellen eines neuen Eintrags mit einem relativen Pfad AddedFolder\NewFile.txt eine komprimierte Textdatei in einem Verzeichnis namens AddedFolder.
Wenn Sie in Ihrem Projekt auf die assembly System.IO.Compression.FileSystem verweisen, Sie können auf vier Erweiterungsmethoden (aus der klasse ZipFileExtensions) für die klasse ZipArchive 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öher). Mit diesen Erweiterungsmethoden können Sie den Inhalt des Eintrags in eine Datei komprimieren und dekomprimieren. Die assembly System.IO.Compression.FileSystem ist für Windows 8.x Store-Apps nicht verfügbar. In Windows 8.x Store-Apps können Sie Dateien mithilfe der Klasse DeflateStream oder GZipStream komprimieren und dekomprimieren oder die Windows-Runtime Typen <xref:Windows.Storage.Compression.Compressor> und <xref:Windows.Storage.Compression.Decompressor> verwenden.
Examples
Im ersten Beispiel wird gezeigt, wie Sie einen neuen Eintrag erstellen und mithilfe eines Datenstroms darauf 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 Erweiterungsmethoden verwendet werden, um einen neuen Eintrag in einem ZIP-Archiv aus einer vorhandenen Datei zu erstellen und den Archivinhalt zu 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
| Name | Beschreibung |
|---|---|
| ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding) |
Initialisiert eine neue Instanz der ZipArchive Klasse im angegebenen Datenstrom für den angegebenen Modus, verwendet die angegebene Codierung für Eintragsnamen und lässt optional den Datenstrom geöffnet. |
| ZipArchive(Stream, ZipArchiveMode, Boolean) |
Initialisiert eine neue Instanz der ZipArchive Klasse im angegebenen Datenstrom für den angegebenen Modus und lässt optional den Datenstrom geöffnet. |
| ZipArchive(Stream, ZipArchiveMode) |
Initialisiert eine neue Instanz der ZipArchive Klasse aus dem angegebenen Datenstrom und mit dem angegebenen Modus. |
| ZipArchive(Stream) |
Initialisiert eine neue Instanz der ZipArchive Klasse aus dem angegebenen Datenstrom. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Comment |
Dient zum Abrufen oder Festlegen des optionalen Archivkommentars. |
| Entries |
Ruft die Auflistung der Einträge ab, die sich derzeit im ZIP-Archiv befinden. |
| Mode |
Ruft einen Wert ab, der den Aktionstyp beschreibt, den das ZIP-Archiv für Einträge ausführen kann. |
Methoden
| Name | Beschreibung |
|---|---|
| CreateAsync(Stream, ZipArchiveMode, Boolean, Encoding, CancellationToken) |
Initialisiert und gibt eine neue Instanz des ZipArchive angegebenen Datenstroms im angegebenen Modus zurück und gibt an, ob der Datenstrom geöffnet bleiben soll, mit einer optionalen Codierung und einem optionalen Abbruchtoken. |
| CreateEntry(String, CompressionLevel) |
Erstellt einen leeren Eintrag mit dem angegebenen Eintragsnamen und der Komprimierungsebene im ZIP-Archiv. |
| CreateEntry(String) |
Erstellt einen leeren Eintrag mit dem angegebenen Pfad- und Eintragsnamen im ZIP-Archiv. |
| Dispose() |
Gibt die von der aktuellen Instanz der ZipArchive Klasse verwendeten Ressourcen frei. |
| Dispose(Boolean) |
Wird von den Dispose() Methoden aufgerufen Finalize() , um die nicht verwalteten Ressourcen freizugeben, die von der aktuellen Instanz der ZipArchive Klasse verwendet werden, und beendet optional das Schreiben des Archivs und gibt die verwalteten Ressourcen frei. |
| DisposeAsync() |
Stellt ein Paket komprimierter Dateien im ZIP-Archivformat dar. |
| DisposeAsyncCore() |
Stellt ein Paket komprimierter Dateien im ZIP-Archivformat dar. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetEntry(String) |
Ruft einen Wrapper für den angegebenen Eintrag im ZIP-Archiv ab. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfiguriert, wie auf die von einem asynchronen Einweg zurückgegebenen Aufgaben gewartet wird. |
| CreateEntryFromFile(ZipArchive, String, String, CompressionLevel) |
Archiviert eine Datei, indem sie mithilfe der angegebenen Komprimierungsebene komprimiert und dem ZIP-Archiv hinzugefügt wird. |
| CreateEntryFromFile(ZipArchive, String, String) |
Archiviert eine Datei, indem sie komprimiert und zum ZIP-Archiv hinzugefügt wird. |
| CreateEntryFromFileAsync(ZipArchive, String, String, CancellationToken) |
Fügt dem Archiv unter dem angegebenen Eintragsnamen asynchron eine Datei aus dem Dateisystem hinzu. |
| CreateEntryFromFileAsync(ZipArchive, String, String, CompressionLevel, CancellationToken) |
Fügt dem Archiv unter dem angegebenen Eintragsnamen asynchron eine Datei aus dem Dateisystem hinzu. |
| ExtractToDirectory(ZipArchive, String, Boolean) |
Extrahiert alle Dateien im Archiv in ein Verzeichnis im Dateisystem. |
| ExtractToDirectory(ZipArchive, String) |
Extrahiert alle Dateien im ZIP-Archiv in ein Verzeichnis im Dateisystem. |
| ExtractToDirectoryAsync(ZipArchive, String, Boolean, CancellationToken) |
Extrahiert alle Dateien im Archiv in ein Verzeichnis im Dateisystem. Das angegebene Verzeichnis ist möglicherweise bereits vorhanden. |
| ExtractToDirectoryAsync(ZipArchive, String, CancellationToken) |
Extrahiert asynchron alle Dateien im Archiv in ein Verzeichnis im Dateisystem. Das angegebene Verzeichnis kann bereits vorhanden sein. |