Partilhar via


ZipFileExtensions.ExtractToFile Método

Definição

Extrai uma entrada no arquivo zip para um arquivo.

Sobrecargas

ExtractToFile(ZipArchiveEntry, String)

Extrai uma entrada no arquivo zip para um arquivo.

ExtractToFile(ZipArchiveEntry, String, Boolean)

Extrai uma entrada do arquivo zip para um arquivo e, opcionalmente, substitui um arquivo existente que tem o mesmo nome.

ExtractToFile(ZipArchiveEntry, String)

Origem:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Origem:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Origem:
ZipFileExtensions.ZipArchiveEntry.Extract.cs

Extrai uma entrada no arquivo zip para um arquivo.

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

A entrada do arquivo zip da qual um arquivo será extraído.

destinationFileName
String

O caminho do arquivo a ser criado do conteúdo da entrada. Você pode especificar um caminho absoluto ou relativo. Um caminho relativo é interpretado como relativo ao diretório de trabalho atual.

Exceções

destinationFileName é uma cadeia de comprimento zero, contém somente espaços em branco ou um ou mais caracteres inválidos, conforme definido por InvalidPathChars.

- ou -

destinationFileName especifica um diretório.

destinationFileName é null.

O caminho especificado, o nome de arquivo, ou ambos excedem o tamanho máximo definido pelo sistema.

O caminho especificado é inválido (por exemplo, ele está em uma unidade não mapeada).

destinationFileName já existe.

- ou -

Ocorreu um erro de E/S.

- ou -

A entrada está aberta para gravação.

- ou -

A entrada foi excluída do arquivo.

O chamador não tem a permissão necessária para criar o novo arquivo.

A entrada está ausente do arquivo ou está corrompida e não pode ser lida.

- ou -

A entrada foi compactada usando um método de compactação sem suporte.

O arquivo zip a que esta entrada pertence foi descartado.

destinationFileName está em um formato inválido.

- ou -

O arquivo zip desta entrada foi aberto no modo Create, que não permite a recuperação de entradas.

Exemplos

O exemplo a seguir mostra como iterar pelo conteúdo de um arquivo zip e extrair arquivos que têm uma extensão .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

Comentários

Se o arquivo de destino já existir, esse método não o substituirá; gera uma exceção IOException . Para substituir um arquivo existente, use a sobrecarga do ExtractToFile(ZipArchiveEntry, String, Boolean) método.

A hora da última gravação do arquivo é definida como a última vez em que a entrada no arquivo zip foi alterada; esse valor é armazenado na LastWriteTime propriedade .

Você não pode usar esse método para extrair um diretório; em vez disso, use o ExtractToDirectory método .

Aplica-se a

ExtractToFile(ZipArchiveEntry, String, Boolean)

Origem:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Origem:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Origem:
ZipFileExtensions.ZipArchiveEntry.Extract.cs

Extrai uma entrada do arquivo zip para um arquivo e, opcionalmente, substitui um arquivo existente que tem o mesmo nome.

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

A entrada do arquivo zip da qual um arquivo será extraído.

destinationFileName
String

O caminho do arquivo a ser criado do conteúdo da entrada. Você pode especificar um caminho absoluto ou relativo. Um caminho relativo é interpretado como relativo ao diretório de trabalho atual.

overwrite
Boolean

true para substituir um arquivo existente que tem o mesmo nome do arquivo de destino; caso contrário, false.

Exceções

destinationFileName é uma cadeia de comprimento zero, contém somente espaços em branco ou um ou mais caracteres inválidos, conforme definido por InvalidPathChars.

- ou -

destinationFileName especifica um diretório.

destinationFileName é null.

O caminho especificado, o nome de arquivo, ou ambos excedem o tamanho máximo definido pelo sistema.

O caminho especificado é inválido (por exemplo, ele está em uma unidade não mapeada).

destinationFileName já existe e overwrite é false.

- ou -

Ocorreu um erro de E/S.

- ou -

A entrada está aberta para gravação.

- ou -

A entrada foi excluída do arquivo.

O chamador não tem a permissão necessária para criar o novo arquivo.

A entrada está ausente do arquivo ou está corrompida e não pode ser lida.

- ou -

A entrada foi compactada usando um método de compactação sem suporte.

O arquivo zip a que esta entrada pertence foi descartado.

destinationFileName está em um formato inválido.

- ou -

O arquivo zip desta entrada foi aberto no modo Create, que não permite a recuperação de entradas.

Exemplos

O exemplo a seguir mostra como iterar pelo conteúdo de um arquivo zip e extrair arquivos que têm uma extensão .txt. Ele substitui um arquivo existente que tem o mesmo nome na pasta de destino. Para compilar esse exemplo de código, você deve referenciar os System.IO.Compression assemblies e System.IO.Compression.FileSystem em seu projeto.

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

Comentários

A hora da última gravação do arquivo é definida como a última vez em que a entrada no arquivo zip foi alterada; esse valor é armazenado na LastWriteTime propriedade .

Você não pode usar esse método para extrair um diretório; em vez disso, use o ExtractToDirectory método .

Aplica-se a