ZipArchiveEntry.FullName 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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
적용 대상
.NET