Condividi tramite


ZipArchive Classe

Definizione

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.

Si applica a

Vedi anche