ZipArchive Classe

Definizione

Rappresenta un pacchetto di file compressi nel formato di archivio ZIP.

public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
Ereditarietà
ZipArchive
Implementazioni

Esempio

Il primo esempio mostra come creare una nuova voce e scriverla 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 mostra 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

Commenti

I metodi per modificare gli archivi ZIP e le relative voci di file vengono distribuiti in tre classi: ZipFile, ZipArchivee ZipArchiveEntry.

Per Utilizzo
Creare 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 classe ZipFileExtensions) per la classe ZipArchive: 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 Windows 8.x Store è possibile comprimere e decomprimere i file usando la classe DeflateStream o GZipStream oppure è possibile usare i tipi di Windows Runtime Compressor e Decompressor.

Costruttori

Nome Descrizione
ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

Inizializza una nuova istanza della ZipArchive classe nel flusso specificato per la modalità specificata, usa la codifica specificata per i nomi delle voci e, facoltativamente, lascia aperto il flusso.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Inizializza una nuova istanza della ZipArchive classe nel flusso specificato per la modalità specificata e, facoltativamente, lascia aperto il flusso.

ZipArchive(Stream, ZipArchiveMode)

Inizializza una nuova istanza della ZipArchive classe dal flusso specificato e con la modalità specificata.

ZipArchive(Stream)

Inizializza una nuova istanza della ZipArchive classe dal flusso specificato.

Proprietà

Nome Descrizione
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

Nome Descrizione
CreateEntry(String, CompressionLevel)

Crea una voce vuota con il nome di voce e il livello di compressione specificati nell'archivio ZIP.

CreateEntry(String)

Crea una voce vuota con il percorso e il nome di voce specificati nell'archivio ZIP.

Dispose()

Rilascia le risorse usate dall'istanza corrente della ZipArchive classe .

Dispose(Boolean)

Chiamato dai Dispose() metodi e Finalize() per rilasciare le risorse non gestite usate dall'istanza corrente della ZipArchive classe e, facoltativamente, completa la scrittura dell'archivio e rilascia 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 il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Metodi di estensione

Nome Descrizione
CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Archivia un file comprimendolo usando il livello di compressione specificato e aggiungendolo all'archivio ZIP.

CreateEntryFromFile(ZipArchive, String, String)

Archivia un file comprimendolo e aggiungendolo all'archivio ZIP.

ExtractToDirectory(ZipArchive, String, Boolean)

Estrae tutti i file nell'archivio in una directory nel file system.

ExtractToDirectory(ZipArchive, String)

Estrae tutti i file nell'archivio ZIP in una directory nel file system.

Si applica a

Vedi anche