Формат ZIP-архива

В эпоху цифровых технологий, когда данные играют главную роль, а эффективность хранения имеет первостепенное значение, ZIP-архивы остаются надежным и распространенным решением для сжатия и организации файлов.

Информация об архиве ZIP

ZIP — это формат архива, который может хранить один или несколько файлов и папок, сжатых без потерь, с шифрованием или без него. ZIP — самый популярный формат, известный уже более тридцати лет и поддерживаемый практически во всех современных операционных системах. Этот формат также распространился на некоторые другие форматы, такие как JAR и OpenDocument.

Информация об истории формата файла Zip-архива

Первая спецификация формата ZIP была опубликована в 1989 году. Авторами идеи ZIP были Фил Кац и Гэри Конвей. Он имел немедленный успех благодаря своей эффективности в уменьшении размера файлов, упрощении хранения и передачи файлов через медленное подключение к Интернету и ограниченную емкость хранилища той эпохи. С 1993 года он поддерживает наиболее распространенный метод сжатия Deflate. Надежное шифрование AES было введено в 2003 году. Несмотря на то, что стандарт довольно старый, он не устарел и активно развивается в настоящее время. Поэтому в 2020 году он был расширен методами сжатия Zstandard, MP3 и XZ.

Структура ZIP-архива

ZIP-архивы имеют такую ​​иерархическую структуру для эффективного хранения и организации сжатых файлов, обеспечивая при этом легкий доступ к отдельным файлам в архиве. Каждая запись архива сжимается отдельно, возможно даже со своим методом сжатия и шифрования. Запись внутри архива имеет предшествующий заголовок с метаданными исходного файла. Таблица содержания находится в конце файла. Такой подход позволяет составить самораспаковывающийся (SFX) архив, который также остается действительным ZIP-архивом, поскольку исполняемая часть находится в самом начале SFX-файла.

Методы сжатия почтового индекса

Современный ZIP позволяет сжимать данные с помощью алгоритмов Deflate, Deflate64™, BZIP2, LZMA, XZ, PPMd, Zstandard. Файл также можно хранить без сжатия. Наиболее распространенным является Deflate, который используется по умолчанию в любом архиваторе. Также существуют алгоритмы сжатия без потерь конкретных файлов: MP3, JPEG, WAV. Aspose.ZIP полностью поддерживает стандартные методы Deflate, Deflate64™, Bzip2, LZMA, XZ, PPMd и Z. Он позволяет извлекать аудио, сжатое WavPack.

Поддерживаемые операции ZIP-архива

Используя Aspose.ZIP, вы можете обрабатывать ZIP-архив различными способами. Вы можете составлять архив, добавлять записи в существующий архив без перепаковки, удалять записи из существующего архива, не затрагивая остальную часть архива, а также извлекать произвольную запись или весь архив. Вы можете зашифровать и расшифровать каждую запись отдельно с помощью устаревшего или современного алгоритма шифрования AES. Aspose.ZIP способен создавать самораспаковывающиеся и многотомные ZIP-архивы.

Zip-файл - Внутренняя структура

Как уже было сказано, центральный каталог, который представляет собой оглавление, расположен в конце ZIP-архива. Этот каталог действует как индекс, в котором перечислены все записи файлов в архиве с указанием их позиций в архиве. Заголовки записей могут включать время создания и изменения, атрибуты файловой системы, имя файла и комментарий. Заголовок записи можно расширить дополнительным полем для хранения пользовательских метаданных. Можно включить заголовки Zip64 для поддержки более 65 535 записей в архиве. Максимальный размер ZIP-архива с расширением Zip64 составляет 264−1 байт. ZIP-архив можно разделить на несколько файлов. В таком случае в центральном каталоге хранятся смещения каждого тома для быстрого доступа к определенной записи.

Zip-файл - Внутренняя структура

Популярность Zip-архива и поддержка

ZIP — формат архивов номер один. ZIP-архивы настолько широко признаны и поддерживаются, что различные программные приложения, в том числе популярные файловые менеджеры, такие как Windows Explorer, macOS Finder, а также инструменты с открытым исходным кодом, такие как 7-Zip и WinRAR , обеспечивают встроенную поддержку создание и извлечение ZIP-файлов. Эта поддержка распространяется на службы облачного хранения, почтовые клиенты и даже мобильные устройства.

Примеры использования Zip-файлов

Zip-архивы — это универсальный формат файлов для сжатия и организации данных, что делает их незаменимыми в различных программных приложениях. Работа с архивами через .NET дает разработчикам возможность легко работать с Zip-файлами. В следующих примерах кода мы углубимся в возможности работы с Zip-архивом, продемонстрировав, как создавать новые Zip архивы и эффективно извлекать файлы из существующие. Эти примеры помогут вам использовать возможности этой библиотеки для беспрепятственного управления Zip-архивами в ваших проектах .NET.

Create Zip file via .NET

Compose ZIP archive with two entries added by their paths.:

using (var archive = new Archive())
{
    archive.CreateEntry("entry_name1.dat", "input_file1.dat");
    archive.CreateEntry("entry_name2.dat", "input_file2.dat");
    archive.Save("result_archive.zip");
}

How to UnZIP files in C#

Steps: Unzip File to Folder in C#

  • Create an instance of Archive class based on your zip file.
  • Unzip the zip file using Archive.ExtractToDirectory method to your folder.
using (var archive = new Archive("input_archive.zip"))
{
    archive.ExtractToDirectory("outputDirectory");
}

Compressing Single File ZIP File

Steps: Compressing Single File in C#

  • Create a file stream with the desired name of your output zip file.
  • Create file stream of the data file to be compressed and encrypted.
  • Create an instance of Archive class and pass to it an instance of ArchiveEntrySettings class with AesEcryptionSettings instance, specifying the password.
  • Add data file created in step 2 using Archive.CreateEntry method.
  • Compress and encrypt the data file using Archive.Save method and pass it the file stream created in step 1.
using (var zipFile = File.Open("EncrypedWithAES256.zip", FileMode.Create))
{
    using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
     {
           using (var archive = new Archive(new ArchiveEntrySettings(null, new  AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
           {
                  archive.CreateEntry("alice29.txt", source);
                  archive.Save(zipFile);
           }
      }
}

Deleting entries from existing archive

You do not have to repack whole archive when you only need to remove one entry from it. Steps:

  • Create a file stream with the desired name of your output zip file.
  • Create an instance of Archive class based on your zip file.
  • Delete the first file - the entry with zero index – from the archive.
  • Save the archive without excluded entry to output stream from step 1
using (FileStream outputZipFile = File.Open(withoutAnEntry.zip, FileMode.Create))
{
    using (Archive archive = new Archive(archive.zip))
    {
        archive.DeleteEntry(archive.Entries[0]);
        archive.Save(outputZipFile);
    }
}

Aspose.Zip offers individual archive processing APIs for popular development environments, listed below:

Aspose.Zip for .NETAspose.Zip via JavaAspose.Zip via Python.NET

Дополнительная информация о Zip-архивах

Часто Задаваемые Вопросы

1. Какой метод шифрования мне выбрать?

Формат ZIP поддерживает традиционные (ZipCrypto) и современные методы шифрования AES. Первый намного слабее второго и его легко сломать; ZipCrypto поддерживается Aspose.ZIP для устаревших версий. При создании архива используйте только шифрование AES256.

2. Есть ли способ воспользоваться преимуществами многоядерных процессоров для сжатия?

Aspose.ZIP позволяет компоновать записи ZIP-архива по разным ядрам ЦП. Это может значительно сократить общее время сжатия. См. статью с объяснением и примером использования.

3. Может ли вирус заразить zip?

Да, вирусы потенциально могут заразить файлы в Zip-архиве, если сами файлы заражены. Хотя сам по себе формат Zip не является опасным, он может хранить и транспортировать зараженные файлы, как и любой другой формат файлов.