ZipArchive Classe

Definição

Representa um pacote de arquivos compactados no formato de arquivo zip.

public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
Herança
ZipArchive
Implementações

Comentários

Os métodos para manipular arquivos zip e suas entradas de arquivo são distribuídos em três classes: ZipFile, ZipArchivee ZipArchiveEntry.

Para Uso
Criar um arquivo zip de um diretório ZipFile.CreateFromDirectory
Extrair o conteúdo de um arquivo zip para um diretório ZipFile.ExtractToDirectory
Adicionar novos arquivos a um arquivo zip existente ZipArchive.CreateEntry
Recuperar um arquivo de um arquivo zip ZipArchive.GetEntry
Recuperar todos os arquivos de um arquivo zip ZipArchive.Entries
Abrir um fluxo para um único arquivo contido em um arquivo zip ZipArchiveEntry.Open
Excluir um arquivo de um arquivo zip ZipArchiveEntry.Delete

Quando você cria uma nova entrada, o arquivo é compactado e adicionado ao pacote zip. O CreateEntry método permite que você especifique uma hierarquia de diretório ao adicionar a entrada. Você inclui o caminho relativo da nova entrada dentro do pacote zip. Por exemplo, criar uma nova entrada com um caminho relativo cria um arquivo de AddedFolder\NewFile.txt texto compactado em um diretório chamado AddedFolder.

Se você fizer referência ao System.IO.Compression.FileSystem assembly em seu projeto, poderá acessar quatro métodos de extensão (da ZipFileExtensions classe) para a ZipArchive classe: CreateEntryFromFile(ZipArchive, String, String), , CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)e ExtractToDirectory(ZipArchive, String, Boolean) ExtractToDirectory(ZipArchive, String)(disponível no .NET Core 2.0 e versões posteriores). Esses métodos de extensão permitem compactar e descompactar o conteúdo da entrada em um arquivo. O System.IO.Compression.FileSystem assembly não está disponível para aplicativos Windows 8.x Store. Em aplicativos da Loja Windows 8.x, você pode compactar e descompactar arquivos usando a classe ou a DeflateStream classe ou pode usar os tipos Compressor de Windows Runtime e Decompressor.GZipStream

Exemplos

O primeiro exemplo mostra como criar uma nova entrada e gravar nela usando um fluxo.

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

O exemplo a seguir mostra como abrir um arquivo zip e iterar por meio da coleção de entradas.

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

O terceiro exemplo mostra como usar métodos de extensão para criar uma nova entrada em um arquivo zip de um arquivo existente e extrair o conteúdo do arquivo. Você deve fazer referência ao System.IO.Compression.FileSystem assembly para executar o código.

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

Construtores

ZipArchive(Stream)

Inicializa uma nova instância da classe ZipArchive do fluxo especificado.

ZipArchive(Stream, ZipArchiveMode)

Inicializa uma nova instância da classe ZipArchive no fluxo especificado e com o modo especificado.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Inicializa uma nova instância da classe ZipArchive no fluxo especificado para o modo especificado e, opcionalmente, deixa o fluxo aberto.

ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

Inicializa uma nova instância da classe ZipArchive no fluxo especificado para o modo especificado, usa a codificação especificada para nomes de entrada e, como opção, deixa o fluxo aberto.

Propriedades

Comment

Obtém ou define o comentário de arquivo opcional.

Entries

Obtém a coleção de entradas que atualmente estão no arquivo zip.

Mode

Obtém um valor que descreve o tipo de ação que o arquivo zip pode executar em entradas.

Métodos

CreateEntry(String)

Cria uma entrada vazia que tem o caminho especificado e nome de entrada no arquivo zip.

CreateEntry(String, CompressionLevel)

Cria uma entrada vazia que tem o nível de compactação e o nome de entrada especificados no arquivo-morto zip.

Dispose()

Libera os recursos usados pela instância atual da classe ZipArchive.

Dispose(Boolean)

Chamado pelos métodos Dispose() e Finalize() para liberar os recursos não gerenciados usados pela instância atual da classe ZipArchive e, opcionalmente, terminar de gravar o arquivo e libera os recursos gerenciados.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetEntry(String)

Recupera um wrapper para a entrada especificada no arquivo zip.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Métodos de Extensão

CreateEntryFromFile(ZipArchive, String, String)

Arquiva um arquivo compactando-o e adicionando-o ao arquivo zip.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Arquiva um arquivo, compactando-o usando o nível de compactação especificado e adicionando-o ao arquivo zip.

ExtractToDirectory(ZipArchive, String)

Extrai todos os arquivos no arquivo zip especificado para um diretório do sistema de arquivos.

ExtractToDirectory(ZipArchive, String, Boolean)

Extrai todos os arquivos dos arquivos para um diretório do sistema de arquivos.

Aplica-se a

Confira também