Compartir vía


ZipArchiveEntry.FullName Propiedad

Definición

Obtiene la ruta de acceso relativa de la entrada en el archivo zip.

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

Valor de propiedad

Ruta de acceso relativa de la entrada en el archivo zip.

Comentarios

La FullName propiedad contiene la ruta de acceso relativa, incluida la jerarquía de subdirectorios, de una entrada en un archivo ZIP. (En cambio, la Name propiedad contiene solo el nombre de la entrada y no incluye la jerarquía de subdirectorios). Por ejemplo, si crea dos entradas en un archivo ZIP mediante el CreateEntryFromFile método y proporciona NewEntry.txt como nombre para la primera entrada y AddedFolder\\NewEntry.txt para la segunda entrada, ambas entradas tendrán NewEntry.txt en la Name propiedad . La primera entrada también NewEntry.txt tendrá en la FullName propiedad , pero la segunda entrada tendrá AddedFolder\\NewEntry.txt en la FullName propiedad .

Puede especificar cualquier cadena como ruta de acceso de una entrada, incluidas las cadenas que especifican rutas de acceso no válidas y absolutas. Por lo tanto, la FullName propiedad puede contener un valor que no tiene el formato correcto. Una ruta de acceso absoluta o no válida podría producir una excepción al extraer el contenido del archivo ZIP.

Ejemplos

En el ejemplo siguiente se muestra cómo recorrer en iteración el contenido de un archivo .zip y extraer archivos que contienen la 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

Se aplica a