Формат 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-архивы настолько широко признаны и поддерживаются, что различные программные приложения, в том числе популярные файловые менеджеры, такие как 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);
}
}
Дополнительная информация о Zip-архивах
Часто Задаваемые Вопросы
1. Какой метод шифрования мне выбрать?
Формат ZIP поддерживает традиционные (ZipCrypto) и современные методы шифрования AES. Первый намного слабее второго и его легко сломать; ZipCrypto поддерживается Aspose.ZIP для устаревших версий. При создании архива используйте только шифрование AES256.
2. Есть ли способ воспользоваться преимуществами многоядерных процессоров для сжатия?
Aspose.ZIP позволяет компоновать записи ZIP-архива по разным ядрам ЦП. Это может значительно сократить общее время сжатия. См. статью с объяснением и примером использования.
3. Может ли вирус заразить zip?
Да, вирусы потенциально могут заразить файлы в Zip-архиве, если сами файлы заражены. Хотя сам по себе формат Zip не является опасным, он может хранить и транспортировать зараженные файлы, как и любой другой формат файлов.