ZipArchive Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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. |