다음을 통해 공유


ZipArchiveEntry.FullName 속성

정의

zip 보관 위치에 있는 항목의 상대 경로를 가져옵니다.

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

속성 값

zip 보관 위치에 있는 항목의 상대 경로입니다.

설명

속성에는 FullName zip 보관 파일에 있는 항목의 하위 디렉터리 계층 구조를 포함한 상대 경로가 포함됩니다. 반면에 속성에는 Name 항목 이름만 포함되며 하위 디렉터리 계층 구조는 포함되지 않습니다. 예를 들어 메서드를 사용하여 CreateEntryFromFile zip 보관 파일에 두 개의 항목을 만들고 첫 번째 항목의 이름으로 를 제공하고 NewEntry.txt 두 번째 항목 AddedFolder\\NewEntry.txt 의 경우 두 항목 모두 속성에 Name 있습니다NewEntry.txt. 첫 번째 항목도 NewEntry.txt 속성에 FullName 있지만 두 번째 항목은 속성에 FullName 있습니다AddedFolder\\NewEntry.txt.

잘못된 경로와 절대 경로를 지정하는 문자열을 포함하여 모든 문자열을 항목의 경로로 지정할 수 있습니다. 따라서 속성에 FullName 형식이 올바르게 지정되지 않은 값이 포함될 수 있습니다. zip 보관 파일의 내용을 추출할 때 유효하지 않거나 절대 경로가 예외가 발생할 수 있습니다.

예제

다음 예제에서는 .zip 파일의 내용을 반복하고 .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

적용 대상