Comparteix a través de


ZipFileExtensions Clase

Definición

Proporciona métodos de extensión para las clases ZipArchive y ZipArchiveEntry.

public ref class ZipFileExtensions abstract sealed
public static class ZipFileExtensions
type ZipFileExtensions = class
Public Module ZipFileExtensions
Herencia
ZipFileExtensions

Comentarios

La ZipFileExtensions clase solo contiene métodos estáticos que extienden las ZipArchive clases y ZipArchiveEntry . No se crea una instancia de la ZipFileExtensions clase ; en su lugar, se usan estos métodos a partir de instancias de ZipArchive o ZipArchiveEntry.

Para usar los métodos de extensión, debe hacer referencia al ensamblado en el System.IO.Compression.FileSystem proyecto. El System.IO.Compression.FileSystem ensamblado no está disponible en las aplicaciones de la Tienda Windows 8.x. Por lo tanto, las ZipFileExtensions clases y ZipFile (que están en el System.IO.Compression.FileSystem ensamblado) no están disponibles en las aplicaciones de la Tienda Windows 8.x. En las aplicaciones de la Tienda Windows 8.x, se trabaja con archivos comprimidos mediante los métodos de ZipArchive, ZipArchiveEntry, DeflateStreamy GZipStream.

La ZipFileExtensions clase contiene cuatro métodos que extienden ZipArchive:

La ZipFileExtensions clase contiene dos métodos que extienden ZipArchiveEntry:

Ejemplos

En el ejemplo siguiente se muestra cómo crear una nueva entrada en un archivo ZIP a partir de un archivo existente y extraer el contenido del archivo en un directorio.

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

En el ejemplo siguiente se muestra cómo recorrer en iteración el contenido de un archivo ZIP y extraer archivos que tienen una extensión .txt.

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

Métodos

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.

ExtractToFile(ZipArchiveEntry, String)

Dibuja una entrada del archivo zip a un archivo.

ExtractToFile(ZipArchiveEntry, String, Boolean)

Extrae una entrada del archivo zip en un archivo y, opcionalmente, sobrescribe un archivo existente que tenga el mismo nombre.

Se aplica a