ZipFileExtensions.ExtractToFile ZipFileExtensions.ExtractToFile ZipFileExtensions.ExtractToFile ZipFileExtensions.ExtractToFile Method

Definición

Dibuja una entrada del archivo zip a un archivo.Extracts an entry in the zip archive to a file.

Sobrecargas

ExtractToFile(ZipArchiveEntry, String) ExtractToFile(ZipArchiveEntry, String) ExtractToFile(ZipArchiveEntry, String) ExtractToFile(ZipArchiveEntry, String)

Dibuja una entrada del archivo zip a un archivo.Extracts an entry in the zip archive to a file.

ExtractToFile(ZipArchiveEntry, String, Boolean) ExtractToFile(ZipArchiveEntry, String, Boolean) ExtractToFile(ZipArchiveEntry, String, Boolean) ExtractToFile(ZipArchiveEntry, String, Boolean)

Extrae una entrada del archivo zip a un archivo, y sobrescribe opcionalmente un archivo existente que tiene el mismo nombre.Extracts an entry in the zip archive to a file, and optionally overwrites an existing file that has the same name.

ExtractToFile(ZipArchiveEntry, String) ExtractToFile(ZipArchiveEntry, String) ExtractToFile(ZipArchiveEntry, String) ExtractToFile(ZipArchiveEntry, String)

Dibuja una entrada del archivo zip a un archivo.Extracts an entry in the zip archive to a file.

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 ZipArchiveEntry ZipArchiveEntry ZipArchiveEntry

La entrada del archivo zip del que se va a extraer un archivo.The zip archive entry to extract a file from.

destinationFileName
String String String String

La ruta de acceso del archivo que se va a crear a partir del contenido de la entrada.The path of the file to create from the contents of the entry. Puede especificar una ruta de acceso relativa o absoluta.You can specify either a relative or an absolute path. Una ruta de acceso relativa se interpreta en relación con el directorio de trabajo actual.A relative path is interpreted as relative to the current working directory.

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.destinationFileName is a zero-length string, contains only white space, or contains one or more invalid characters as defined by InvalidPathChars.

O bien-or- destinationFileName especifica un directorio.destinationFileName specifies a directory.

destinationFileName es null.destinationFileName is null.

La ruta de acceso especificada, el nombre de archivo o ambos superan la longitud máxima definida por el sistema.The specified path, file name, or both exceed the system-defined maximum length.

La ruta de acceso especificada no es válida (por ejemplo, está en una unidad no asignada).The specified path is invalid (for example, it is on an unmapped drive).

destinationFileName ya existe.destinationFileName already exists.

O bien-or- Error de E/S.An I/O error occurred.

O bien-or- La entrada está actualmente abierta para escribir en ella.The entry is currently open for writing.

O bien-or- Se ha eliminado el entrada del archivo.The entry has been deleted from the archive.

El autor de la llamada no tiene el permiso necesario para crear un archivo nuevo.The caller does not have the required permission to create the new file.

La entrada falta en el archivo o está dañada y no se puede leer.The entry is missing from the archive, or is corrupt and cannot be read.

O bien-or- La entrada se ha comprimido mediante un método de compresión que no se admite.The entry has been compressed by using a compression method that is not supported.

Se ha desechado el archivo zip al que pertenece esta entrada.The zip archive that this entry belongs to has been disposed.

destinationFileName está en un formato no válido.destinationFileName is in an invalid format.

O bien-or- El archivo zip para esta entrada se ha abierto en modo Create, que no permite la recuperación de entradas.The zip archive for this entry was opened in Create mode, which does not permit the retrieval of entries.

Ejemplos

El ejemplo siguiente muestra cómo recorrer en iteración el contenido de un archivo zip y extraer los archivos que tienen una extensión. txt.The following example shows how to iterate through the contents of a zip archive file and extract files that have a .txt extension.

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 sobrescribe produce un IOException excepción.If the destination file already exists, this method does not overwrite it; it throws an IOException exception. Para sobrescribir un archivo existente, use el ExtractToFile(ZipArchiveEntry, String, Boolean) sobrecarga del método en su lugar.To overwrite an existing file, use the ExtractToFile(ZipArchiveEntry, String, Boolean) method overload instead.

La última hora de escritura del archivo se establece en la última vez que se ha cambiado la entrada en el archivo zip; Este valor se almacena en el LastWriteTime propiedad.The last write time of the file is set to the last time the entry in the zip archive was changed; this value is stored in the LastWriteTime property.

No se puede usar este método para extraer un directorio; Utilice el ExtractToDirectory método en su lugar.You cannot use this method to extract a directory; use the ExtractToDirectory method instead.

ExtractToFile(ZipArchiveEntry, String, Boolean) ExtractToFile(ZipArchiveEntry, String, Boolean) ExtractToFile(ZipArchiveEntry, String, Boolean) ExtractToFile(ZipArchiveEntry, String, Boolean)

Extrae una entrada del archivo zip a un archivo, y sobrescribe opcionalmente un archivo existente que tiene el mismo nombre.Extracts an entry in the zip archive to a file, and optionally overwrites an existing file that has the same name.

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 ZipArchiveEntry ZipArchiveEntry ZipArchiveEntry

La entrada del archivo zip del que se va a extraer un archivo.The zip archive entry to extract a file from.

destinationFileName
String String String String

La ruta de acceso del archivo que se va a crear a partir del contenido de la entrada.The path of the file to create from the contents of the entry. Puede especificar una ruta de acceso relativa o absoluta.You can specify either a relative or an absolute path. Una ruta de acceso relativa se interpreta en relación con el directorio de trabajo actual.A relative path is interpreted as relative to the current working directory.

overwrite
Boolean Boolean Boolean Boolean

true para sobrescribir un archivo existente que tiene el mismo nombre que el archivo de destino; si no, false.true to overwrite an existing file that has the same name as the destination file; otherwise, 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.destinationFileName is a zero-length string, contains only white space, or contains one or more invalid characters as defined by InvalidPathChars.

O bien-or- destinationFileName especifica un directorio.destinationFileName specifies a directory.

destinationFileName es null.destinationFileName is null.

La ruta de acceso especificada, el nombre de archivo o ambos superan la longitud máxima definida por el sistema.The specified path, file name, or both exceed the system-defined maximum length.

La ruta de acceso especificada no es válida (por ejemplo, está en una unidad no asignada).The specified path is invalid (for example, it is on an unmapped drive).

destinationFileName ya existe y overwrite es false.destinationFileName already exists and overwrite is false.

O bien-or- Error de E/S.An I/O error occurred.

O bien-or- La entrada está actualmente abierta para escribir en ella.The entry is currently open for writing.

O bien-or- Se ha eliminado el entrada del archivo.The entry has been deleted from the archive.

El autor de la llamada no tiene el permiso necesario para crear un archivo nuevo.The caller does not have the required permission to create the new file.

La entrada falta en el archivo o está dañada y no se puede leer.The entry is missing from the archive or is corrupt and cannot be read.

O bien-or- La entrada se ha comprimido mediante un método de compresión que no se admite.The entry has been compressed by using a compression method that is not supported.

Se ha desechado el archivo zip al que pertenece esta entrada.The zip archive that this entry belongs to has been disposed.

destinationFileName está en un formato no válido.destinationFileName is in an invalid format.

O bien-or- El archivo zip para esta entrada se ha abierto en modo Create, que no permite la recuperación de entradas.The zip archive for this entry was opened in Create mode, which does not permit the retrieval of entries.

Ejemplos

El ejemplo siguiente muestra cómo recorrer en iteración el contenido de un archivo zip y extraer los archivos que tienen una extensión. txt.The following example shows how to iterate through the contents of a zip archive file, and extract files that have a .txt extension. Sobrescribe un archivo existente que tiene el mismo nombre en la carpeta de destino.It overwrites an existing file that has the same name in the destination folder. En orden al compilador de este ejemplo de código, debe hacer referencia a la System.IO.Compression y System.IO.Compression.FileSystem ensamblados en el proyecto.In order to compiler this code example, you must reference the System.IO.Compression and System.IO.Compression.FileSystem assemblies in your project.

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 ha cambiado la entrada en el archivo zip; Este valor se almacena en el LastWriteTime propiedad.The last write time of the file is set to the last time the entry in the zip archive was changed; this value is stored in the LastWriteTime property.

No se puede usar este método para extraer un directorio; Utilice el ExtractToDirectory método en su lugar.You cannot use this method to extract a directory; use the ExtractToDirectory method instead.

Se aplica a