Архивы ZIP используются для сжатия и хранения одного или нескольких файлов или папок в одном контейнере. ZIP-архив инкапсулирует файлы и папки, а также содержит информацию об их метаданных. Наиболее распространенное использование архивации — это уменьшение размера файлов для хранения или передачи и применение шифрования для обеспечения безопасности. Помимо инструментов сжатия файлов, функции автоматического сжатия/извлечения также используются в различных настольных и веб-приложениях для загрузки, скачивания, совместного использования или шифрования файлов. Эта статья также нацелена на аналогичные сценарии и представляет несколько простых способов сжатия файлов или папок и создания ZIP-архивов программными средствами с помощью C#.
В этой статье вы узнаете, как выполнять следующие операции ZIP-архивирования:
- Создайте ZIP-архив с помощью C#
- Добавить несколько файлов в ZIP-архив
- Добавить папки в ZIP-архив
- Создайте защищенный паролем ZIP-архив с помощью ZipCrypto
- Зашифровать ZIP-архив с помощью шифрования AES
- Установить режим параллельного сжатия
Предварительное условие — ZIP-библиотека C#
Aspose.ZIP for .NET — это мощный и простой в использовании API для сжатия или распаковки файлов и папок в приложениях .NET. Он также предоставляет методы шифрования AES для шифрования файлов в ZIP-архивах. Вы можете установить API из NuGet или загрузить его двоичные файлы из раздела Загрузки.
Создайте ZIP-архив на C#
Ниже приведены шаги по сжатию файла путем его добавления в ZIP-архив:
- Создайте объект FileStream для выходного ZIP-архива.
- Откройте исходный файл в объект FileStream.
- Создайте объект класса Архив.
- Добавьте файл в архив методом Archive.CreateEntry(string, FileStream).
- Создайте ZIP-архив, используя метод Archive.Save(FileStream).
В следующем примере кода показано, как добавить файл в ZIP-архив с помощью C#.
// Создать FileStream для выходного ZIP-архива
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
// Файл для добавления в архив
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings()))
{
// Добавить файл в архив
archive.CreateEntry("alice29.txt", source1);
// ZIP-файл
archive.Save(zipFile);
}
}
}
Добавить несколько файлов в ZIP-архив на С#
Если вы хотите добавить несколько файлов в ZIP-архив, вы можете сделать это одним из следующих способов.
Заархивируйте несколько файлов с помощью FileStream
В этом методе класс FileStream используется для добавления файлов в ZIP-архив с помощью метода Archive.CreateEntry(String, FileStream). В следующем примере кода показано, как добавить несколько файлов в ZIP-архив на C#.
// Создать FileStream для выходного ZIP-архива
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Файл для добавления в архив
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// Файл для добавления в архив
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// Добавить файлы в архив
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// Заархивируйте файлы
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
}
}
}
}
ZIP несколько файлов с использованием FileInfo
Вы также можете использовать класс FileInfo для добавления нескольких файлов в ZIP-архив. В этом методе файлы будут загружены с помощью класса FileInfo и добавлены в ZIP-архив с помощью метода Archive.CreateEntry(String, FileInfo). В следующем примере кода показано, как архивировать несколько файлов с помощью класса FileInfo в C#.
// Создать FileStream для выходного ZIP-архива
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Файлы для добавления в архив
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// Добавить файлы в архив
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// Создать ZIP-архив
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
ZIP-файлы с использованием пути
Вместо использования классов FileInfo или FileStream для записей ZIP вы можете указать путь к файлу непосредственно методу Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). В следующем примере кода показано, как сжать файлы ZIP, используя их путь.
// Создать FileStream для выходного ZIP-архива
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
// Создать архив
using (var archive = new Archive())
{
// Добавить файл в ZIP-архив
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
Добавить папки в ZIP-архив на C#
Вы также можете заархивировать папку, что может быть еще одной альтернативой добавлению нескольких файлов в ZIP-архив. Просто поместите исходные файлы в папку и добавьте эту папку в ZIP-архив. Ниже приведены шаги для ZIP папки:
- Создайте объект класса FileStream для выходного ZIP-архива.
- Создайте экземпляр класса Архив.
- Используйте класс DirectoryInfo, чтобы указать папку для архивации.
- Используйте метод Archive.CreateEntries(DirectoryInfo), чтобы добавить папку в ZIP.
- Создайте ZIP-архив, используя метод Archive.Save(FileStream).
В следующем примере кода показано, как добавить папку в ZIP-архив на C#.
// Создать FileStream для выходного ZIP-архива
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive())
{
// Папка для архивации
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Создать ZIP-архив
archive.Save(zipFile);
}
}
Создайте защищенный паролем ZIP-файл, используя ZipCrypto в C#
Вы можете защитить ZIP-архивы с помощью паролей и применить шифрование ZipCrypto. Для этого в конструкторе класса Archive используется класс ArchiveEntrySettings, который вторым параметром принимает тип шифрования.
В следующем примере кода показано, как создать ZIP-архив, защищенный паролем, с помощью ZipCrypto на C#.
// Создать FileStream для выходного ZIP-архива
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
{
// Добавить папку в архив
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Создать ZIP-архив
archive.Save(zipFile);
}
}
С# Создать защищенный паролем ZIP с шифрованием AES
Aspose.ZIP для .NET также позволяет применять шифрование AES для защиты ZIP-архивов. Вы можете использовать следующие методы шифрования AES:
- AES128
- AES192
- AES256
Для применения шифрования AES API предлагает класс AesEcryptionSettings. В следующем примере кода показано, как создать защищенный паролем ZIP-файл с шифрованием AES на C#.
// Создать FileStream для выходного ZIP-архива
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
{
// Добавить папку в архив
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Создать ZIP-архив
archive.Save(zipFile);
}
}
Установить режим параллельного сжатия
Вы также можете настроить API для параллельного сжатия в случае нескольких записей. Для этого можно указать режим параллельного сжатия с помощью класса ParallelOptions. Aspose.ZIP для .NET предоставляет следующие режимы параллельного сжатия.
- Никогда — не сжимать параллельно.
- Всегда — делать сжатие параллельно (остерегайтесь нехватки памяти).
- Авто — решите, использовать ли параллельное сжатие для записей. Эта опция может сжимать только некоторые записи параллельно.
В следующем примере кода показано, как установить режим параллельного сжатия при сжатии нескольких файлов.
// Полные примеры и файлы данных можно найти на странице https://github.com/aspose-zip/Aspose.ZIP-for-.NET.
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
{
using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2);
//Определите критерий параллелизма
var parallelOptions = new ParallelOptions
{
ParallelCompressInMemory = ParallelCompressionMode.Always
};
archive.Save(zipFile,
new ArchiveSaveOptions()
{
ParallelOptions = parallelOptions,
Encoding = Encoding.ASCII,
ArchiveComment = "There are two poems from Canterbury corpus"
});
}
}
}
}
Узнайте больше об Aspose.ZIP для .NET
Узнайте больше о нашем C# ZIP API, используя следующие ресурсы:
Вывод
В этой статье вы узнали, как программно создавать ZIP-архивы на C#. В примерах кода показано, как добавлять файлы и папки в ZIP-архивы. Кроме того, мы также рассмотрели, как создавать ZIP-архивы, защищенные паролем, с помощью методов шифрования ZipCrypto и AES на C#. Кроме того, в конце также обсуждается параллельное сжатие нескольких записей. Если у вас возникнут какие-либо вопросы или вопросы, вы можете задать их нам через наш форум.