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

Définition

Extrait une entrée de l'archive zip dans un fichier.Extracts an entry in the zip archive to a file.

Surcharges

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

Extrait une entrée de l'archive zip dans un fichier.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)

Extrait une entrée dans l'archive zip d'un fichier et remplace éventuellement un fichier existant qui porte le même nom.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)

Extrait une entrée de l'archive zip dans un fichier.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)

Paramètres

source
ZipArchiveEntry ZipArchiveEntry ZipArchiveEntry ZipArchiveEntry

Entrée d'archive ZIP depuis laquelle extraire un fichier.The zip archive entry to extract a file from.

destinationFileName
String String String String

Chemin d'accès du fichier à créer à partir du contenu de l'entrée.The path of the file to create from the contents of the entry. Vous pouvez spécifier un chemin relatif ou absolu.You can specify either a relative or an absolute path. Un chemin d'accès relatif est interprété comme étant relatif au répertoire de travail actif.A relative path is interpreted as relative to the current working directory.

Exceptions

destinationFileName est une chaîne de longueur nulle, contient seulement un espace, ou contient un ou plusieurs caractères non valides définis par InvalidPathChars.destinationFileName is a zero-length string, contains only white space, or contains one or more invalid characters as defined by InvalidPathChars.

- ou --or- destinationFileName spécifie un répertoire.destinationFileName specifies a directory.

destinationFileName est null.destinationFileName is null.

Le chemin et/ou le nom de fichier spécifiés dépassent la longueur maximale définie par le système.The specified path, file name, or both exceed the system-defined maximum length.

Le chemin spécifié n’est pas valide (par exemple, il est sur un lecteur non mappé).The specified path is invalid (for example, it is on an unmapped drive).

destinationFileName existe déjà.destinationFileName already exists.

- ou --or- Une erreur d'E/S s'est produite.An I/O error occurred.

- ou --or- L'entrée est actuellement ouverte en écriture.The entry is currently open for writing.

ou-or- L'entrée a été supprimée de l'archive.The entry has been deleted from the archive.

L'appelant n'a pas l'autorisation requise pour créer le fichier.The caller does not have the required permission to create the new file.

L'entrée est manquante dans l'archive, ou est endommagée et ne peut pas être lue.The entry is missing from the archive, or is corrupt and cannot be read.

ou-or-

L'entrée a été compressée à l'aide d'une méthode de compression non prise en charge.The entry has been compressed by using a compression method that is not supported.

L'archive ZIP à laquelle appartient cette entrée a été supprimée.The zip archive that this entry belongs to has been disposed.

destinationFileName a un format non valide.destinationFileName is in an invalid format.

ou-or- L'archive ZIP de cette entrée a été ouverte en mode Create, qui ne permet pas la récupération des entrées.The zip archive for this entry was opened in Create mode, which does not permit the retrieval of entries.

Exemples

L’exemple suivant montre comment itérer au sein du contenu d’un fichier d’archive zip et extraire les fichiers qui ont une extension. 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

Remarques

Si le fichier de destination existe déjà, cette méthode ne le remplace pas; elle lève une IOException exception.If the destination file already exists, this method does not overwrite it; it throws an IOException exception. Pour remplacer un fichier existant, utilisez la surcharge ExtractToFile(ZipArchiveEntry, String, Boolean) de méthode à la place.To overwrite an existing file, use the ExtractToFile(ZipArchiveEntry, String, Boolean) method overload instead.

L’heure de la dernière écriture du fichier est définie à la date de la dernière modification de l’entrée dans l’archive zip. Cette valeur est stockée dans LastWriteTime la propriété.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.

Vous ne pouvez pas utiliser cette méthode pour extraire un répertoire; Utilisez la ExtractToDirectory méthode à la place.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)

Extrait une entrée dans l'archive zip d'un fichier et remplace éventuellement un fichier existant qui porte le même nom.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)

Paramètres

source
ZipArchiveEntry ZipArchiveEntry ZipArchiveEntry ZipArchiveEntry

Entrée d'archive ZIP depuis laquelle extraire un fichier.The zip archive entry to extract a file from.

destinationFileName
String String String String

Chemin d'accès du fichier à créer à partir du contenu de l'entrée.The path of the file to create from the contents of the entry. Spécification possible d'un chemin d'accès absolu ou relatif.You can specify either a relative or an absolute path. Un chemin d'accès relatif est interprété comme étant relatif au répertoire de travail actif.A relative path is interpreted as relative to the current working directory.

overwrite
Boolean Boolean Boolean Boolean

true pour remplacer un fichier existant portant le même nom que le fichier de destination ; sinon, false.true to overwrite an existing file that has the same name as the destination file; otherwise, false.

Exceptions

destinationFileName est une chaîne de longueur nulle, contient seulement un espace, ou contient un ou plusieurs caractères non valides définis par InvalidPathChars.destinationFileName is a zero-length string, contains only white space, or contains one or more invalid characters as defined by InvalidPathChars.

ou-or- destinationFileName spécifie un répertoire.destinationFileName specifies a directory.

destinationFileName construit par défaut est null.destinationFileName is null.

Le chemin et/ou le nom de fichier spécifiés dépassent la longueur maximale définie par le système.The specified path, file name, or both exceed the system-defined maximum length.

Le chemin spécifié n’est pas valide (par exemple, il est sur un lecteur non mappé).The specified path is invalid (for example, it is on an unmapped drive).

destinationFileName existe déjà et overwrite a la valeur false.destinationFileName already exists and overwrite is false.

- ou --or- Une erreur d'E/S s'est produite.An I/O error occurred.

- ou --or- L'entrée est actuellement ouverte en écriture.The entry is currently open for writing.

ou-or- L'entrée a été supprimée de l'archive.The entry has been deleted from the archive.

L'appelant n'a pas l'autorisation requise pour créer le fichier.The caller does not have the required permission to create the new file.

L'entrée est manquante dans l'archive, ou est endommagée et ne peut pas être lue.The entry is missing from the archive or is corrupt and cannot be read.

ou-or-

L'entrée a été compressée à l'aide d'une méthode de compression non prise en charge.The entry has been compressed by using a compression method that is not supported.

L'archive ZIP à laquelle appartient cette entrée a été supprimée.The zip archive that this entry belongs to has been disposed.

destinationFileName a un format non valide.destinationFileName is in an invalid format.

- ou --or- L'archive ZIP de cette entrée a été ouverte en mode Create, qui ne permet pas la récupération des entrées.The zip archive for this entry was opened in Create mode, which does not permit the retrieval of entries.

Exemples

L’exemple suivant montre comment itérer au sein du contenu d’un fichier d’archive zip et extraire les fichiers qui ont une extension. txt.The following example shows how to iterate through the contents of a zip archive file, and extract files that have a .txt extension. Il remplace un fichier existant portant le même nom dans le dossier de destination.It overwrites an existing file that has the same name in the destination folder. Pour compiler cet exemple de code, vous devez référencer les System.IO.Compression assemblys System.IO.Compression.FileSystem et dans votre projet.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

Remarques

L’heure de la dernière écriture du fichier est définie à la date de la dernière modification de l’entrée dans l’archive zip. Cette valeur est stockée dans LastWriteTime la propriété.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.

Vous ne pouvez pas utiliser cette méthode pour extraire un répertoire; Utilisez la ExtractToDirectory méthode à la place.You cannot use this method to extract a directory; use the ExtractToDirectory method instead.

S’applique à