ZipArchive Класс

Определение

Представляет пакет сжатых файлов в формате ZIP-архива.

public ref class ZipArchive : IDisposable
public ref class ZipArchive : IAsyncDisposable, IDisposable
public class ZipArchive : IDisposable
public class ZipArchive : IAsyncDisposable, IDisposable
type ZipArchive = class
    interface IDisposable
type ZipArchive = class
    interface IAsyncDisposable
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
Public Class ZipArchive
Implements IAsyncDisposable, IDisposable
Наследование
ZipArchive
Реализации

Комментарии

Методы управления zip-архивами и их записями файлов распределяются по трем классам: ZipFile, ZipArchiveи ZipArchiveEntry.

Кому Использование
Создание ZIP-архива из каталога 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 в проекте, Вы можете получить доступ к четырем методам расширения (из класса ZipFileExtensions) для класса ZipArchive: CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String) и ExtractToDirectory(ZipArchive, String, Boolean) (доступно в .NET Core 2.0 и более поздних версиях). Эти методы расширения позволяют сжимать и распаковывать содержимое записи в файл. Сборка System.IO.Compression.FileSystem недоступна для приложений магазина Windows 8.x. В приложениях магазина Windows 8.x можно сжимать и распаковывать файлы с помощью класса DeflateStream или GZipStream или использовать типы среда выполнения Windows <xref:Windows.Storage.Compression.Compressor> и <xref:Windows.Storage.Compression.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, ZipArchiveMode, Boolean, Encoding)

Инициализирует новый экземпляр ZipArchive класса в указанном потоке для указанного режима, использует указанную кодировку для имен записей и при необходимости оставляет поток открытым.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Инициализирует новый экземпляр ZipArchive класса в указанном потоке для указанного режима и при необходимости оставляет поток открытым.

ZipArchive(Stream, ZipArchiveMode)

Инициализирует новый экземпляр класса из указанного ZipArchive потока и с указанным режимом.

ZipArchive(Stream)

Инициализирует новый экземпляр класса из указанного ZipArchive потока.

Свойства

Имя Описание
Comment

Возвращает или задает необязательный комментарий архива.

Entries

Возвращает коллекцию записей, которые в настоящее время находятся в ZIP-архиве.

Mode

Возвращает значение, описывающее тип действия, которое zip-архив может выполняться для записей.

Методы

Имя Описание
CreateAsync(Stream, ZipArchiveMode, Boolean, Encoding, CancellationToken)

Асинхронно инициализирует и возвращает новый экземпляр ZipArchive данного потока в указанном режиме, указывая, следует ли оставить поток открытым, с необязательным кодировкой и необязательным маркером отмены.

CreateEntry(String, CompressionLevel)

Создает пустую запись с указанным именем записи и уровнем сжатия в zip-архиве.

CreateEntry(String)

Создает пустую запись с указанным путем и именем записи в zip-архиве.

Dispose()

Освобождает ресурсы, используемые текущим экземпляром ZipArchive класса.

Dispose(Boolean)

Вызывается методом Dispose()Finalize() и способами для освобождения неуправляемых ресурсов, используемых текущим экземпляром класса, и при необходимости завершает запись архива ZipArchive и освобождает управляемые ресурсы.

DisposeAsync()

Представляет пакет сжатых файлов в формате ZIP-архива.

DisposeAsyncCore()

Представляет пакет сжатых файлов в формате ZIP-архива.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEntry(String)

Извлекает оболочку для указанной записи в ZIP-архиве.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Методы расширения

Имя Описание
ConfigureAwait(IAsyncDisposable, Boolean)

Настраивает способ ожидания задач, возвращаемых из асинхронного удаления.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Архивирует файл, сжимая его с помощью указанного уровня сжатия и добавляя его в ZIP-архив.

CreateEntryFromFile(ZipArchive, String, String)

Архивирует файл, сжимая его и добавляя его в ZIP-архив.

CreateEntryFromFileAsync(ZipArchive, String, String, CancellationToken)

Асинхронно добавляет файл из файловой системы в архив под указанным именем записи.

CreateEntryFromFileAsync(ZipArchive, String, String, CompressionLevel, CancellationToken)

Асинхронно добавляет файл из файловой системы в архив под указанным именем записи.

ExtractToDirectory(ZipArchive, String, Boolean)

Извлекает все файлы в архив в каталог файловой системы.

ExtractToDirectory(ZipArchive, String)

Извлекает все файлы в ZIP-архив в каталог файловой системы.

ExtractToDirectoryAsync(ZipArchive, String, Boolean, CancellationToken)

Извлекает все файлы в архив в каталог файловой системы. Указанный каталог уже может существовать.

ExtractToDirectoryAsync(ZipArchive, String, CancellationToken)

Асинхронно извлекает все файлы в архив в каталог файловой системы. Указанный каталог уже может существовать.

Применяется к

См. также раздел