ZipArchive Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un pacchetto di file compressi nel formato di archiviazione ZIP.
public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
interface IDisposable
Public Class ZipArchive
Implements IDisposable
- Ereditarietà
-
ZipArchive
- Implementazioni
Commenti
I metodi per modificare gli archivi ZIP e le relative voci di file vengono distribuiti tra tre classi: ZipFile, ZipArchivee ZipArchiveEntry.
A | Uso |
---|---|
Create un archivio ZIP da una directory | ZipFile.CreateFromDirectory |
Estrarre il contenuto di un archivio ZIP in una directory | ZipFile.ExtractToDirectory |
Aggiungere nuovi file a un archivio ZIP esistente | ZipArchive.CreateEntry |
Recuperare un file da un archivio ZIP | ZipArchive.GetEntry |
Recuperare tutti i file da un archivio ZIP | ZipArchive.Entries |
Aprire un flusso in un singolo file contenuto in un archivio ZIP | ZipArchiveEntry.Open |
Eliminare un file da un archivio ZIP | ZipArchiveEntry.Delete |
Quando si crea una nuova voce, il file viene compresso e aggiunto al pacchetto ZIP. Il CreateEntry metodo consente di specificare una gerarchia di directory quando si aggiunge la voce. Includere il percorso relativo della nuova voce all'interno del pacchetto ZIP. Ad esempio, la creazione di una nuova voce con un percorso relativo di crea un file di AddedFolder\NewFile.txt
testo compresso in una directory denominata AddedFolder.
Se si fa riferimento all'assembly System.IO.Compression.FileSystem
nel progetto, è possibile accedere a quattro metodi di estensione (dalla ZipFileExtensions classe ) per la ZipArchive classe : CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String)e ExtractToDirectory(ZipArchive, String, Boolean) (disponibile in .NET Core 2.0 e versioni successive). Questi metodi di estensione consentono di comprimere e decomprimere il contenuto della voce in un file. L'assembly System.IO.Compression.FileSystem
non è disponibile per le app dello Store Windows 8.x. Nelle app di Windows 8.x Store puoi comprimere e decomprimere i file usando la DeflateStream classe o GZipStream oppure puoi usare i tipi Compressor di Windows Runtime e Decompressor.
Esempio
Il primo esempio mostra come creare una nuova voce e scrivervi usando un flusso.
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
Nell'esempio seguente viene illustrato come aprire un archivio ZIP e scorrere la raccolta di voci.
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
Il terzo esempio illustra come usare i metodi di estensione per creare una nuova voce in un archivio ZIP da un file esistente ed estrarre il contenuto dell'archivio. È necessario fare riferimento all'assembly System.IO.Compression.FileSystem
per eseguire il codice.
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
Costruttori
ZipArchive(Stream) |
Inizializza una nuova istanza della classe ZipArchive dal flusso specificato. |
ZipArchive(Stream, ZipArchiveMode) |
Inizializza una nuova istanza della classe ZipArchive dal flusso specificato e con la modalità specificata. |
ZipArchive(Stream, ZipArchiveMode, Boolean) |
Inizializza una nuova istanza della classe ZipArchive sulla base del flusso specificato per la modalità specificata. Facoltativamente mantiene aperto il flusso. |
ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding) |
Inizializza una nuova istanza della classe ZipArchive sulla base del flusso specificato per la modalità specificata. Utilizza la codifica specificata per i nomi delle voci e, facoltativamente mantiene aperto il flusso. |
Proprietà
Comment |
Ottiene o imposta il commento di archiviazione facoltativo. |
Entries |
Ottiene la raccolta di voci attualmente presenti nell'archivio ZIP. |
Mode |
Ottiene un valore che descrive il tipo di azione che l'archivio ZIP può eseguire sulle voci. |
Metodi
CreateEntry(String) |
Crea una voce vuota con il percorso e il nome della voce specificati nell'archivio ZIP. |
CreateEntry(String, CompressionLevel) |
Crea una voce vuota con il livello di compressione e il nome voce specificati nell'archivio ZIP. |
Dispose() |
Rilascia le risorse usate dall'istanza corrente della classe ZipArchive. |
Dispose(Boolean) |
Chiamato dai metodi Dispose() e Finalize() per rilasciare le risorse non gestite utilizzate dall'istanza corrente della classe ZipArchive e facoltativamente completa la scrittura dell'archivio e libera le risorse gestite. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetEntry(String) |
Recupera un wrapper per la voce specificata nell'archivio zip. |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Metodi di estensione
CreateEntryFromFile(ZipArchive, String, String) |
Archivia un file comprimendolo e aggiungendolo all'archivio ZIP. |
CreateEntryFromFile(ZipArchive, String, String, CompressionLevel) |
Archivia un file comprimendolo con il livello di compressione specificato e aggiungendolo all'archivio ZIP. |
ExtractToDirectory(ZipArchive, String) |
Estrae tutti i file nell'archivio ZIP in una directory del file system. |
ExtractToDirectory(ZipArchive, String, Boolean) |
Estrae tutti i file nell'archivio in una directory nel file system. |