Comparteix a través de


ZipArchive Clase

Definición

Representa un paquete de archivos comprimidos en formato de archivo zip.

public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
Herencia
ZipArchive
Implementaciones

Comentarios

Los métodos para manipular archivos ZIP y sus entradas de archivo se distribuyen entre tres clases: ZipFile, ZipArchivey ZipArchiveEntry.

En Usar
Create un archivo ZIP desde un directorio ZipFile.CreateFromDirectory
Extracción del contenido de un archivo ZIP en un directorio ZipFile.ExtractToDirectory
Agregar nuevos archivos a un archivo ZIP existente ZipArchive.CreateEntry
Recuperar un archivo de un archivo ZIP ZipArchive.GetEntry
Recuperar todos los archivos de un archivo ZIP ZipArchive.Entries
Abrir una secuencia en un único archivo incluido en un archivo ZIP ZipArchiveEntry.Open
Eliminar un archivo de un archivo ZIP ZipArchiveEntry.Delete

Al crear una nueva entrada, el archivo se comprime y se agrega al paquete ZIP. El CreateEntry método permite especificar una jerarquía de directorios al agregar la entrada. Incluye la ruta de acceso relativa de la nueva entrada dentro del paquete ZIP. Por ejemplo, al crear una nueva entrada con una ruta de acceso relativa de se crea un archivo de AddedFolder\NewFile.txt texto comprimido en un directorio denominado AddedFolder.

Si hace referencia al ensamblado en el System.IO.Compression.FileSystem proyecto, puede acceder a cuatro métodos de extensión (desde la ZipFileExtensions clase ) para la ZipArchive clase : CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String)y ExtractToDirectory(ZipArchive, String, Boolean) (disponibles en .NET Core 2.0 y versiones posteriores). Estos métodos de extensión permiten comprimir y descomprimir el contenido de la entrada en un archivo. El System.IO.Compression.FileSystem ensamblado no está disponible para las aplicaciones de la Tienda Windows 8.x. En Windows 8.x Aplicaciones de la Tienda, puedes comprimir y descomprimir archivos mediante la DeflateStream clase o GZipStream , o puedes usar los tipos Compressor de Windows Runtime y Decompressor.

Ejemplos

En el primer ejemplo se muestra cómo crear una nueva entrada y escribir en ella mediante una secuencia.

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

En el ejemplo siguiente se muestra cómo abrir un archivo ZIP e iterar por la colección 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

En el tercer ejemplo se muestra cómo usar métodos de extensión para crear una nueva entrada en un archivo ZIP a partir de un archivo existente y extraer el contenido del archivo. Debe hacer referencia al System.IO.Compression.FileSystem ensamblado para ejecutar el 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

Constructores

ZipArchive(Stream)

Inicializa una nueva instancia de la clase ZipArchive a partir de la secuencia especificada.

ZipArchive(Stream, ZipArchiveMode)

Inicializa una nueva instancia de la clase ZipArchive a partir de la secuencia especificada y con el modo especificado.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Inicializa una nueva instancia de la clase ZipArchive en el flujo especificado para el modo especificado y, opcionalmente, deja el flujo abierto.

ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

Inicializa una nueva instancia de la clase ZipArchive en el flujo especificado para el modo especificado, usa la codificación especificada para los nombres de entrada y opcionalmente deja el flujo abierto.

Propiedades

Comment

Obtiene o establece el comentario de archivo opcional.

Entries

Obtiene la colección de entradas que están actualmente en el archivo zip.

Mode

Obtiene un valor que describe el tipo de acción que el archivo zip puede realizar en las entradas.

Métodos

CreateEntry(String)

Crea una entrada vacía en el archivo zip con la ruta de acceso y el nombre de entrada especificados.

CreateEntry(String, CompressionLevel)

Crea una entrada vacía en el archivo zip con el nombre de entrada y el nivel de compresión especificados.

Dispose()

Libera los recursos utilizados por la instancia actual de la clase ZipArchive.

Dispose(Boolean)

Llamado por los métodos Dispose() y Finalize() para liberar los recursos no administrados utilizados por la instancia actual de la clase de ZipArchive, y termina opcionalmente de escribir el archivo y libera los recursos administrados.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetEntry(String)

Recupera un contenedor para la entrada especificada en el archivo zip.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Métodos de extensión

CreateEntryFromFile(ZipArchive, String, String)

Archiva un archivo comprimiéndolo y agregándolo al archivo zip.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Archiva un archivo comprimiéndolo mediante el nivel especificado de compresión y agregándolo al archivo zip.

ExtractToDirectory(ZipArchive, String)

Extrae todos los archivos del archivo ZIP en un directorio del sistema de archivos.

ExtractToDirectory(ZipArchive, String, Boolean)

Extrae todos los archivos del archivo a un directorio del sistema de archivos.

Se aplica a

Consulte también