ZipArchive 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
zip 보관 파일 형식으로 압축된 파일 패키지를 나타냅니다.
public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
interface IDisposable
Public Class ZipArchive
Implements IDisposable
- 상속
-
ZipArchive
- 구현
설명
zip 보관 파일 및 해당 파일 항목을 조작하는 메서드는 , ZipArchive및 ZipArchiveEntry의 세 가지 클래스에 ZipFile분산됩니다.
대상 | 기능 |
---|---|
디렉터리에서 zip 보관 파일 Create | ZipFile.CreateFromDirectory |
zip 보관 파일의 내용을 디렉터리에 추출합니다. | ZipFile.ExtractToDirectory |
기존 zip 보관 파일에 새 파일 추가 | ZipArchive.CreateEntry |
zip 보관 파일에서 파일 검색 | ZipArchive.GetEntry |
zip 보관 파일에서 모든 파일 검색 | ZipArchive.Entries |
zip 보관 파일에 포함된 단일 파일로 스트림 열기 | ZipArchiveEntry.Open |
zip 보관 파일에서 파일 삭제 | ZipArchiveEntry.Delete |
새 항목을 만들면 파일이 압축되어 zip 패키지에 추가됩니다. CreateEntry 메서드를 사용하면 항목을 추가할 때 디렉터리 계층 구조를 지정할 수 있습니다. zip 패키지 내에 새 항목의 상대 경로를 포함합니다. 예를 들어 의 상대 경로를 AddedFolder\NewFile.txt
사용하여 새 항목을 만들면 AddedFolder라는 디렉터리에 압축된 텍스트 파일이 만들어집니다.
프로젝트에서 어셈블리를 System.IO.Compression.FileSystem
참조하는 경우 클래스CreateEntryFromFile(ZipArchive, String, String)의 네 가지 확장 메서드인 ZipFileExtensions , , CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)ExtractToDirectory(ZipArchive, String)및 ExtractToDirectory(ZipArchive, String, Boolean) (.NET Core 2.0 이상 버전에서 사용 가능)ZipArchive에 액세스할 수 있습니다. 이러한 확장 메서드를 사용하면 파일 항목의 내용을 압축하고 압축 해제할 수 있습니다. System.IO.Compression.FileSystem
Windows 8.x 스토어 앱에는 어셈블리를 사용할 수 없습니다. Windows 8.x 스토어 앱에서는 또는 GZipStream 클래스를 사용하여 DeflateStream 파일을 압축 및 압축 해제하거나 Windows 런타임 형식 Compressor 및 Decompressor를 사용할 수 있습니다.
예제
첫 번째 예제에서는 스트림을 사용하여 새 항목을 만들고 해당 항목에 쓰는 방법을 보여줍니다.
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.zip", FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
{
writer.WriteLine("Information about this package.");
writer.WriteLine("========================");
}
}
}
}
}
}
Imports System.IO
Imports System.IO.Compression
Module Module1
Sub Main()
Using zipToOpen As FileStream = New FileStream("c:\users\exampleuser\release.zip", FileMode.Open)
Using archive As ZipArchive = New ZipArchive(zipToOpen, ZipArchiveMode.Update)
Dim readmeEntry As ZipArchiveEntry = archive.CreateEntry("Readme.txt")
Using writer As StreamWriter = New StreamWriter(readmeEntry.Open())
writer.WriteLine("Information about this package.")
writer.WriteLine("========================")
End Using
End Using
End Using
End Sub
End Module
다음 예제에서는 zip 보관 파일을 열고 항목 컬렉션을 반복하는 방법을 보여줍니다.
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
세 번째 예제에서는 확장 메서드를 사용하여 기존 파일에서 zip 보관 파일에 새 항목을 만들고 보관 내용을 추출하는 방법을 보여 줍니다. 코드를 실행하려면 어셈블리를 참조 System.IO.Compression.FileSystem
해야 합니다.
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string zipPath = @"c:\users\exampleuser\start.zip";
string extractPath = @"c:\users\exampleuser\extract";
string newFile = @"c:\users\exampleuser\NewFile.txt";
using (ZipArchive archive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
{
archive.CreateEntryFromFile(newFile, "NewEntry.txt");
archive.ExtractToDirectory(extractPath);
}
}
}
}
Imports System.IO
Imports System.IO.Compression
Module Module1
Sub Main()
Dim zipPath As String = "c:\users\exampleuser\end.zip"
Dim extractPath As String = "c:\users\exampleuser\extract"
Dim newFile As String = "c:\users\exampleuser\NewFile.txt"
Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update)
archive.CreateEntryFromFile(newFile, "NewEntry.txt", CompressionLevel.Fastest)
archive.ExtractToDirectory(extractPath)
End Using
End Sub
End Module
생성자
ZipArchive(Stream) |
지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화합니다. |
ZipArchive(Stream, ZipArchiveMode) |
지정된 모드를 사용하여 지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화합니다. |
ZipArchive(Stream, ZipArchiveMode, Boolean) |
지정된 모드에 대해 지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화하고 스트림을 선택적으로 연 상태로 둡니다. |
ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding) |
지정된 모드에 대해 지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화하고 항목 이름에 대해 지정된 인코딩을 사용하며 스트림을 선택적으로 연 상태로 둡니다. |
속성
Comment |
선택적 보관 주석을 가져오거나 설정합니다. |
Entries |
현재 ZIP 아카이브에 있는 항목의 컬렉션을 가져옵니다. |
Mode |
zip 보관 파일이 엔트리에 대해 수행할 수 있는 동작의 유형을 나타내는 값을 가져옵니다. |
메서드
CreateEntry(String) |
ZIP 보관 위치에 지정된 경로 및 항목 이름을 가진 빈 항목을 만듭니다. |
CreateEntry(String, CompressionLevel) |
ZIP 보관 위치에 지정된 항목 이름 및 압축 수준을 가진 빈 항목을 만듭니다. |
Dispose() |
ZipArchive 클래스의 현재 인스턴스에서 사용하는 리소스를 해제합니다. |
Dispose(Boolean) |
Dispose() 클래스의 현재 인스턴스가 사용하는 관리되지 않는 리소스를 해제하기 위해 Finalize() 및 ZipArchive 메서드에 의해 호출되며 선택적으로 보관 파일을 작성하고 관리되는 리소스를 해제합니다. |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetEntry(String) |
Zip 보관 위치에 지정된 항목에 대한 래퍼를 검색합니다. |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
확장 메서드
CreateEntryFromFile(ZipArchive, String, String) |
파일을 압축하고 ZIP 보관 위치에 추가하여 보관합니다. |
CreateEntryFromFile(ZipArchive, String, String, CompressionLevel) |
지정된 압축 수준을 사용하여 압축하고 zip 보관 저장소에 추가하여 파일을 보관합니다. |
ExtractToDirectory(ZipArchive, String) |
Zip 보관 파일의 모든 파일을 파일 시스템의 디렉터리에 추출합니다. |
ExtractToDirectory(ZipArchive, String, Boolean) |
보관 파일의 모든 파일을 파일 시스템의 디렉터리에 추출합니다. |
적용 대상
추가 정보
.NET