ZipArchive 클래스

정의

zip 보관 파일 형식으로 압축된 파일 패키지를 나타냅니다.Represents a package of compressed files in the zip archive format.

public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
상속
ZipArchive
구현

예제

첫 번째 예제에는 새 항목을 만들고 스트림을 사용 하 여 기록 되도록 하는 방법을 보여 줍니다.The first example shows how to create a new entry and write to it by using a stream.

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 보관 파일을 열고 항목의 컬렉션을 반복 하는 방법을 보여 줍니다.The following example shows how to open a zip archive and iterate through the collection of entries.

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 보관 파일에서 새 항목 만들기 및 보관 압축을 풉니다 확장 메서드를 사용 하는 방법을 보여 줍니다.The third example shows how to use extension methods to create a new entry in a zip archive from an existing file and extract the archive contents. 참조 해야 합니다는 System.IO.Compression.FileSystem 코드를 실행 하는 어셈블리입니다.You must reference the System.IO.Compression.FileSystem assembly to execute the code.

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

설명

Zip 보관 파일 및 해당 파일 항목을 조작 하기 위한 메서드는 세 가지 클래스에 분산 합니다. ZipFile, ZipArchive, 및 ZipArchiveEntry합니다.The methods for manipulating zip archives and their file entries are spread across three classes: ZipFile, ZipArchive, and ZipArchiveEntry.

대상To 기능Use
Zip 보관 파일을 디렉터리에서 만들기Create a zip archive from a directory ZipFile.CreateFromDirectory
디렉터리에는 zip 보관 파일의 내용을 추출합니다Extract the contents of a zip archive to a directory ZipFile.ExtractToDirectory
새 파일을 기존 zip 보관 파일 추가Add new files to an existing zip archive ZipArchive.CreateEntry
Zip 보관 파일에서 파일을 검색 합니다.Retrieve a file from a zip archive ZipArchive.GetEntry
Zip 보관 파일에서 모든 파일을 검색 합니다.Retrieve all the files from a zip archive ZipArchive.Entries
Zip 보관 파일에 포함 된 단일 파일에 스트림을 열기Open a stream to a single file contained in a zip archive ZipArchiveEntry.Open
Zip 보관 파일에서 파일을 삭제 합니다.Delete a file from a zip archive ZipArchiveEntry.Delete

새 항목을 만든 경우에 파일 압축 및 zip 패키지에 추가 합니다.When you create a new entry, the file is compressed and added to the zip package. CreateEntry 메서드를 사용 하면 항목을 추가할 때 디렉터리 계층 구조를 지정할 수 있습니다.The CreateEntry method enables you to specify a directory hierarchy when adding the entry. Zip 패키지 내에서 새 항목의 상대 경로 포함할 수 있습니다.You include the relative path of the new entry within the zip package. 예를 들어의 상대 경로 사용 하 여 새 항목을 만들 AddedFolder\NewFile.txt AddedFolder 라는 디렉터리에 압축 된 텍스트 파일을 만듭니다.For example, creating a new entry with a relative path of AddedFolder\NewFile.txt creates a compressed text file in a directory named AddedFolder.

프로젝트에서 System.IO.Compression.FileSystem 어셈블리를 참조 하는 경우 클래스 CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)에 대 한 네 가지 확장 메서드 ( ZipFileExtensions 클래스에서) (.net ZipArchive 에서 사용 가능) ExtractToDirectory(ZipArchive, String)에 액세스할 ExtractToDirectory(ZipArchive, String, Boolean) 수 있습니다. CreateEntryFromFile(ZipArchive, String, String) Core 2.0 이상 버전).If you reference the System.IO.Compression.FileSystem assembly in your project, you can access four extension methods (from the ZipFileExtensions class) for the ZipArchive class: CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String), and ExtractToDirectory(ZipArchive, String, Boolean) (available in .NET Core 2.0 and later versions). 이러한 확장 메서드를 사용 하 여 압축 및 압축 파일에 항목의 내용이 있습니다.These extension methods enable you to compress and decompress the contents of the entry to a file. 합니다 System.IO.Compression.FileSystem 어셈블리를 사용할 수 없는 Windows 8.x 스토어Windows 8.x Store 앱.The System.IO.Compression.FileSystem assembly is not available for Windows 8.x 스토어Windows 8.x Store apps. Windows 8.x 스토어Windows 8.x Store 앱을 압축 하 고 사용 하 여 파일의 압축을 풀 수를 DeflateStream 또는 GZipStream 클래스를 사용할 수 있습니다는 Windows 런타임Windows Runtime 형식 압축 프로그램압축 풀기 프로그램합니다.In Windows 8.x 스토어Windows 8.x Store apps, you can compress and decompress files by using the DeflateStream or GZipStream class, or you can use the Windows 런타임Windows Runtime types Compressor and Decompressor.

생성자

ZipArchive(Stream)

지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ZipArchive class from the specified stream.

ZipArchive(Stream, ZipArchiveMode)

지정된 모드를 사용하여 지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ZipArchive class from the specified stream and with the specified mode.

ZipArchive(Stream, ZipArchiveMode, Boolean)

지정된 모드에 대해 지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화하고 스트림을 선택적으로 연 상태로 둡니다.Initializes a new instance of the ZipArchive class on the specified stream for the specified mode, and optionally leaves the stream open.

ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

지정된 모드에 대해 지정된 스트림에서 ZipArchive 클래스의 새 인스턴스를 초기화하고 항목 이름에 대해 지정된 인코딩을 사용하며 스트림을 선택적으로 연 상태로 둡니다.Initializes a new instance of the ZipArchive class on the specified stream for the specified mode, uses the specified encoding for entry names, and optionally leaves the stream open.

속성

Entries

현재 ZIP 아카이브에 있는 항목의 컬렉션을 가져옵니다.Gets the collection of entries that are currently in the zip archive.

Mode

zip 보관 파일이 엔트리에 대해 수행할 수 있는 동작의 유형을 나타내는 값을 가져옵니다.Gets a value that describes the type of action the zip archive can perform on entries.

메서드

CreateEntry(String)

ZIP 보관 위치에 지정된 경로 및 항목 이름을 가진 빈 항목을 만듭니다.Creates an empty entry that has the specified path and entry name in the zip archive.

CreateEntry(String, CompressionLevel)

ZIP 보관 위치에 지정된 항목 이름 및 압축 수준을 가진 빈 항목을 만듭니다.Creates an empty entry that has the specified entry name and compression level in the zip archive.

Dispose()

ZipArchive 클래스의 현재 인스턴스에서 사용하는 리소스를 해제합니다.Releases the resources used by the current instance of the ZipArchive class.

Dispose(Boolean)

Dispose() 클래스의 현재 인스턴스가 사용하는 관리되지 않는 리소스를 해제하기 위해 Finalize()ZipArchive 메서드에 의해 호출되며 선택적으로 보관 파일을 작성하고 관리되는 리소스를 해제합니다.Called by the Dispose() and Finalize() methods to release the unmanaged resources used by the current instance of the ZipArchive class, and optionally finishes writing the archive and releases the managed resources.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetEntry(String)

Zip 보관 위치에 지정된 항목에 대한 래퍼를 검색합니다.Retrieves a wrapper for the specified entry in the zip archive.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

확장 메서드

CreateEntryFromFile(ZipArchive, String, String)

파일을 압축하고 ZIP 보관 위치에 추가하여 보관합니다.Archives a file by compressing it and adding it to the zip archive.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

지정된 압축 수준을 사용하여 압축하고 zip 보관 저장소에 추가하여 파일을 보관합니다.Archives a file by compressing it using the specified compression level and adding it to the zip archive.

ExtractToDirectory(ZipArchive, String)

ZIP 보관 파일의 모든 파일을 파일 시스템의 디렉터리에 추출합니다.Extracts all the files in the zip archive to a directory on the file system.

ExtractToDirectory(ZipArchive, String, Boolean)

보관 파일의 모든 파일을 파일 시스템의 디렉터리에 추출합니다.Extracts all of the files in the archive to a directory on the file system.

적용 대상

추가 정보