Partager via


ZipArchiveEntry.FullName Propriété

Définition

Obtient le chemin d’accès relatif de l’entrée dans l’archive zip.

public:
 property System::String ^ FullName { System::String ^ get(); };
public string FullName { get; }
member this.FullName : string
Public ReadOnly Property FullName As String

Valeur de propriété

Chemin d’accès relatif de l’entrée dans l’archive zip.

Remarques

La FullName propriété contient le chemin relatif, y compris la hiérarchie de sous-répertoire, d’une entrée dans une archive zip. (En revanche, la Name propriété contient uniquement le nom de l’entrée et n’inclut pas la hiérarchie de sous-répertoire.) Par exemple, si vous créez deux entrées dans une archive zip à l’aide de la CreateEntryFromFile méthode et que vous fournissez NewEntry.txt comme nom pour la première entrée et AddedFolder\\NewEntry.txt pour la deuxième entrée, les deux entrées auront NewEntry.txt dans la Name propriété. La première entrée aura NewEntry.txt également dans la FullName propriété, mais la deuxième entrée aura AddedFolder\\NewEntry.txt dans la FullName propriété.

Vous pouvez spécifier n’importe quelle chaîne comme chemin d’accès d’une entrée, y compris les chaînes qui spécifient des chemins d’accès non valides et absolus. Par conséquent, la FullName propriété peut contenir une valeur qui n’est pas correctement mise en forme. Un chemin d’accès non valide ou absolu peut entraîner une exception lorsque vous extrayez le contenu de l’archive zip.

Exemples

L’exemple suivant montre comment itérer dans le contenu d’un fichier .zip et extraire les fichiers qui contiennent l’extension .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

S’applique à