ZipFileExtensions.ExtractToFile Método

Definición

Dibuja una entrada del archivo zip a un archivo.

Sobrecargas

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.

ExtractToFile(ZipArchiveEntry, String)

Source:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Source:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Source:
ZipFileExtensions.ZipArchiveEntry.Extract.cs

Dibuja una entrada del archivo zip a un archivo.

public:
[System::Runtime::CompilerServices::Extension]
 static void ExtractToFile(System::IO::Compression::ZipArchiveEntry ^ source, System::String ^ destinationFileName);
public static void ExtractToFile (this System.IO.Compression.ZipArchiveEntry source, string destinationFileName);
static member ExtractToFile : System.IO.Compression.ZipArchiveEntry * string -> unit
<Extension()>
Public Sub ExtractToFile (source As ZipArchiveEntry, destinationFileName As String)

Parámetros

source
ZipArchiveEntry

Entrada del archivo zip de la que se extraerá un archivo.

destinationFileName
String

Ruta de acceso del archivo que se creará a partir del contenido de la entrada. Puede especificar una ruta de acceso relativa o absoluta. Una ruta de acceso relativa se interpreta en relación con el directorio de trabajo actual.

Excepciones

destinationFileName es una cadena de longitud cero que solo contiene espacios en blanco o uno o varios caracteres no válidos definidos por InvalidPathChars.

O bien

destinationFileName especifica un directorio.

destinationFileName es null.

La ruta de acceso especificada, el nombre de archivo o ambos superan la longitud máxima definida por el sistema.

La ruta de acceso especificada no es válida (por ejemplo, está en una unidad no asignada).

destinationFileName ya existe.

o bien

Error de E/S.

O bien

La entrada está abierta actualmente para escritura.

O bien

La entrada se eliminó del archivo.

El llamador no dispone del permiso necesario para crear el archivo nuevo.

La entrada falta en el archivo o está dañada y no se puede leer.

O bien

La entrada se comprimió mediante un método de compresión que no se admite.

Se ha eliminado el archivo zip al que pertenece esta entrada.

destinationFileName está en un formato no válido.

O bien

El archivo zip de esta entrada se abrió en modo Create, que no permite la recuperación de entradas.

Ejemplos

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

Comentarios

Si el archivo de destino ya existe, este método no lo sobrescribe; produce una IOException excepción. Para sobrescribir un archivo existente, use la sobrecarga del ExtractToFile(ZipArchiveEntry, String, Boolean) método en su lugar.

La última hora de escritura del archivo se establece en la última vez que se cambió la entrada en el archivo ZIP; este valor se almacena en la LastWriteTime propiedad .

No puede utilizar este método para extraer un directorio; use el ExtractToDirectory método en su lugar.

Se aplica a

ExtractToFile(ZipArchiveEntry, String, Boolean)

Source:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Source:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Source:
ZipFileExtensions.ZipArchiveEntry.Extract.cs

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

public:
[System::Runtime::CompilerServices::Extension]
 static void ExtractToFile(System::IO::Compression::ZipArchiveEntry ^ source, System::String ^ destinationFileName, bool overwrite);
public static void ExtractToFile (this System.IO.Compression.ZipArchiveEntry source, string destinationFileName, bool overwrite);
static member ExtractToFile : System.IO.Compression.ZipArchiveEntry * string * bool -> unit
<Extension()>
Public Sub ExtractToFile (source As ZipArchiveEntry, destinationFileName As String, overwrite As Boolean)

Parámetros

source
ZipArchiveEntry

Entrada del archivo zip de la que se extraerá un archivo.

destinationFileName
String

Ruta de acceso del archivo que se creará a partir del contenido de la entrada. Puede especificar una ruta de acceso relativa o absoluta. Una ruta de acceso relativa se interpreta en relación con el directorio de trabajo actual.

overwrite
Boolean

true para sobrescribir un archivo existente que tenga el mismo nombre que el archivo de destino; de lo contrario, false.

Excepciones

destinationFileName es una cadena de longitud cero que solo contiene espacios en blanco o uno o varios caracteres no válidos definidos por InvalidPathChars.

O bien

destinationFileName especifica un directorio.

destinationFileName es null.

La ruta de acceso especificada, el nombre de archivo o ambos superan la longitud máxima definida por el sistema.

La ruta de acceso especificada no es válida (por ejemplo, está en una unidad no asignada).

destinationFileName ya existe y overwrite es false.

o bien

Error de E/S.

O bien

La entrada está abierta actualmente para escritura.

O bien

La entrada se eliminó del archivo.

El llamador no dispone del permiso necesario para crear el archivo nuevo.

Falta la entrada en el archivo o está dañada y no se puede leer.

O bien

La entrada se comprimió mediante un método de compresión que no se admite.

Se ha eliminado el archivo zip al que pertenece esta entrada.

destinationFileName está en un formato no válido.

O bien

El archivo zip de esta entrada se abrió en modo Create, que no permite la recuperación de entradas.

Ejemplos

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. Sobrescribe un archivo existente que tiene el mismo nombre en la carpeta de destino. Para compilar este ejemplo de código, debe hacer referencia a los System.IO.Compression ensamblados y System.IO.Compression.FileSystem del proyecto.

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string zipPath = @"c:\example\start.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))
                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, true);
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = "c:\example\start.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) 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, true)
                    End If

                End If
            Next
        End Using
    End Sub

End Module

Comentarios

La última hora de escritura del archivo se establece en la última vez que se cambió la entrada en el archivo ZIP; este valor se almacena en la LastWriteTime propiedad .

No puede utilizar este método para extraer un directorio; use el ExtractToDirectory método en su lugar.

Se aplica a