ZipArchive Classe

Definizione

Rappresenta un pacchetto di file compressi nel formato di archiviazione zip.Represents a package of compressed files in the zip archive format.

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

Esempi

Nel primo esempio viene illustrato come creare una nuova voce e scrivervi utilizzando un flusso.The first example shows how to create a new entry and write to it by using a stream.

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 ed eseguire l'iterazione nella raccolta di voci.The following example shows how to open a zip archive and iterate through the collection of entries.

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.The third example shows how to use extension methods to create a new entry in a zip archive from an existing file and extract the archive contents. Per eseguire il codice System.IO.Compression.FileSystem , è necessario fare riferimento all'assembly.You must reference the System.IO.Compression.FileSystem assembly to execute the code.

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 la modifica degli archivi zip e le relative voci di file vengono distribuiti in ZipFiletre ZipArchiveclassi: ZipArchiveEntry, e.The methods for manipulating zip archives and their file entries are spread across three classes: ZipFile, ZipArchive, and ZipArchiveEntry.

ATo UsaUse
Creare un archivio zip da una directoryCreate a zip archive from a directory ZipFile.CreateFromDirectory
Estrarre il contenuto di un archivio zip in una directoryExtract the contents of a zip archive to a directory ZipFile.ExtractToDirectory
Aggiungere nuovi file a un archivio Zip esistenteAdd new files to an existing zip archive ZipArchive.CreateEntry
Recuperare un file da un archivio zipRetrieve a file from a zip archive ZipArchive.GetEntry
Recuperare tutti i file da un archivio zipRetrieve all the files from a zip archive ZipArchive.Entries
Apre un flusso a un singolo file contenuto in un archivio zipOpen a stream to a single file contained in a zip archive ZipArchiveEntry.Open
Eliminare un file da un archivio zipDelete a file from a zip archive ZipArchiveEntry.Delete

Quando si crea una nuova voce, il file viene compresso e aggiunto al pacchetto zip.When you create a new entry, the file is compressed and added to the zip package. Il CreateEntry metodo consente di specificare una gerarchia di directory quando si aggiunge la voce.The CreateEntry method enables you to specify a directory hierarchy when adding the entry. Il percorso relativo della nuova voce viene incluso nel pacchetto zip.You include the relative path of the new entry within the zip package. La creazione di una nuova voce con un percorso relativo crea ad AddedFolder\NewFile.txt esempio un file di testo compresso in una directory denominata AddedFolder.For example, creating a new entry with a relative path of AddedFolder\NewFile.txt creates a compressed text file in a directory named AddedFolder.

Se si fa riferimento System.IO.Compression.FileSystem all'assembly nel progetto, è possibile accedere a quattro metodi di estensione ( ZipFileExtensions dalla classe) per ZipArchive ExtractToDirectory(ZipArchive, String)la classe CreateEntryFromFile(ZipArchive, String, String): CreateEntryFromFile(ZipArchive, String, String, CompressionLevel),, e ExtractToDirectory(ZipArchive, String, Boolean) (disponibile in .NET Core 2,0 e versioni successive).If you reference the System.IO.Compression.FileSystem assembly in your project, you can access four extension methods (from the ZipFileExtensions class) for the ZipArchive class: CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String), and ExtractToDirectory(ZipArchive, String, Boolean) (available in .NET Core 2.0 and later versions). Questi metodi di estensione consentono di comprimere e decomprimere il contenuto della voce in un file.These extension methods enable you to compress and decompress the contents of the entry to a file. L' System.IO.Compression.FileSystem assembly non è disponibile per Windows 8.x StoreWindows 8.x Store le app.The System.IO.Compression.FileSystem assembly is not available for Windows 8.x StoreWindows 8.x Store apps. Nelle Windows 8.x StoreWindows 8.x Store app è possibile comprimere e decomprimere i DeflateStream file GZipStream usando la classe o oppure è possibile Windows RuntimeWindows Runtime usare i tipi comprimer e Decompressor.In Windows 8.x StoreWindows 8.x Store apps, you can compress and decompress files by using the DeflateStream or GZipStream class, or you can use the Windows RuntimeWindows Runtime types Compressor and Decompressor.

Costruttori

ZipArchive(Stream)

Inizializza una nuova istanza della classe ZipArchive dal flusso specificato.Initializes a new instance of the ZipArchive class from the specified stream.

ZipArchive(Stream, ZipArchiveMode)

Inizializza una nuova istanza della classe ZipArchive dal flusso specificato e con la modalità specificata.Initializes a new instance of the ZipArchive class from the specified stream and with the specified mode.

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.Initializes a new instance of the ZipArchive class on the specified stream for the specified mode, and optionally leaves the stream open.

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.Initializes a new instance of the ZipArchive class on the specified stream for the specified mode, uses the specified encoding for entry names, and optionally leaves the stream open.

Proprietà

Entries

Ottiene la raccolta di voci attualmente presenti nell'archivio ZIP.Gets the collection of entries that are currently in the zip archive.

Mode

Ottiene un valore che descrive il tipo di azione che l'archivio ZIP può eseguire sulle voci.Gets a value that describes the type of action the zip archive can perform on entries.

Metodi

CreateEntry(String)

Crea una voce vuota con il percorso e il nome della voce specificati nell'archivio ZIP.Creates an empty entry that has the specified path and entry name in the zip archive.

CreateEntry(String, CompressionLevel)

Crea una voce vuota con il livello di compressione e il nome voce specificati nell'archivio ZIP.Creates an empty entry that has the specified entry name and compression level in the zip archive.

Dispose()

Rilascia le risorse usate dall'istanza corrente della classe ZipArchive.Releases the resources used by the current instance of the ZipArchive class.

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.Called by the Dispose() and Finalize() methods to release the unmanaged resources used by the current instance of the ZipArchive class, and optionally finishes writing the archive and releases the managed resources.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetEntry(String)

Recupera un wrapper per la voce specificata nell'archivio zip.Retrieves a wrapper for the specified entry in the zip archive.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Metodi di estensione

CreateEntryFromFile(ZipArchive, String, String)

Archivia un file comprimendolo e aggiungendolo all'archivio ZIP.Archives a file by compressing it and adding it to the zip archive.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Archivia un file comprimendolo con il livello di compressione specificato e aggiungendolo all'archivio ZIP.Archives a file by compressing it using the specified compression level and adding it to the zip archive.

ExtractToDirectory(ZipArchive, String)

Estrae tutti i file nell'archivio zip in una directory del file system.Extracts all the files in the zip archive to a directory on the file system.

ExtractToDirectory(ZipArchive, String, Boolean)

Estrae tutti i file nell'archivio in una directory nel file system.Extracts all of the files in the archive to a directory on the file system.

Si applica a

Vedi anche