Для работы с zip архивами в C# имеются встроенные средства. Для их использования необходимо добавить следующие references в ваш проект:
— System.IO.Compression
— System.IO.Compression.FileSystem
Ниже приводится код обычных консольных приложений с базовыми примерами:
Архивация папки
using System.IO.Compression; namespace Zip { class Program { static void Main(string[] args) { // путь к папке const string directoryPath = @"D:\\folder"; // путь к архиву const string archivePath = @"D:\\archive.zip"; // вызов метода, который заархивирует указанную папку ZipFile.CreateFromDirectory(directoryPath, archivePath); } } }
Архивация папки с указанием типа сжатия
using System.IO.Compression; namespace Zip { class Program { static void Main(string[] args) { // путь к папке const string directoryPath = @"D:\\folder"; // пути к архивам const string noCompressionArchivePath = @"D:\\noCompression.zip"; const string fastestArchivePath = @"D:\\fastest.zip"; const string optimalArchivePath = @"D:\\optimal.zip"; // архивирование папки с указанием типа сжатия // последний параметр указывает на то, нужно ли включать саму папку в архив или только её содержимое // архивирование папки без использования сжатия ZipFile.CreateFromDirectory(directoryPath, noCompressionArchivePath, CompressionLevel.NoCompression, false); // архивирование папки с использованием быстрого, но не оптимального сжатия ZipFile.CreateFromDirectory(directoryPath, fastestArchivePath, CompressionLevel.Fastest, false); // архивирование папки с использованием сжатия ZipFile.CreateFromDirectory(directoryPath, optimalArchivePath, CompressionLevel.Optimal, false); } } }
Добавление файла в новый архив
using System.IO.Compression; namespace Zip { class Program { static void Main(string[] args) { // путь к создаваемому архиву const string archivePath = @"D:\\archive.zip"; // создание нового архива using (ZipArchive zipArchive = ZipFile.Open(archivePath, ZipArchiveMode.Create)) { // путь к добавляемому файлу const string pathFileToAdd = @"D:\\file.txt"; // имя добавляемого файла const string nameFileToAdd = "file.txt"; // вызов метода для добавления файла в архив zipArchive.CreateEntryFromFile(pathFileToAdd, nameFileToAdd); } } } }
Добавление файла в существующий архив
using System.IO.Compression; namespace Zip { class Program { static void Main(string[] args) { // путь к архиву const string archivePath = @"D:\\archive.zip"; // открываем архив в режиме обновления using (ZipArchive zipArchive = ZipFile.Open(archivePath, ZipArchiveMode.Update)) { // путь к добавляемому файлу const string pathFileToAdd = @"D:\\file.txt"; // имя добавляемого файла const string nameFileToAdd = "file.txt"; // вызов метода для добавления файла в архив zipArchive.CreateEntryFromFile(pathFileToAdd, nameFileToAdd); } } } }
Извлечение конкретного файла из архива
using System.IO.Compression; using System.Linq; namespace Zip { class Program { static void Main(string[] args) { // путь к архиву const string archivePath = @"D:\\archive.zip"; // открытие архива в режиме чтения using (ZipArchive zipArchive = ZipFile.OpenRead(archivePath)) { // имя извлекаемого файла const string nameExtractFile = "file.txt"; // путь, куда необходимо извлечь файл const string pathExtractFile = @"D:\\file.txt"; // поиск необходимого файла в архиве // если он есть, то будет вызван метод, который его извлечёт zipArchive.Entries.FirstOrDefault(x => x.Name == nameExtractFile)?. ExtractToFile(pathExtractFile); } } } }
При распаковке конкретного файла, если он уже существует, вы получите ошибку. Если вам необходимо перезаписать файл, нужно будет добавить дополнительный параметр в метод ExtractToFile:
zipArchive.Entries.FirstOrDefault(x => x.Name == nameExtractFile)?. ExtractToFile(pathExtractFile, true);
Удаление конкретного файла из архива
using System.IO.Compression; using System.Linq; namespace Zip { class Program { static void Main(string[] args) { // путь к архиву const string archivePath = @"D:\\archive.zip"; // открытие архива в режиме обновления using (ZipArchive zipArchive = ZipFile.Open(archivePath, ZipArchiveMode.Update)) { // имя удаляемого файла const string nameDeleteFile = "file.txt"; // поиск файла для удаления // если он найден, то вызывается метод для его удаления zipArchive.Entries.FirstOrDefault(x => x.Name == nameDeleteFile)?.Delete(); } } } }
Получение списка файлов, которые содержатся в архиве
using System; using System.IO.Compression; namespace Zip { class Program { static void Main(string[] args) { // путь к архиву const string archivePath = @"D:\\archive.zip"; // открытие архива в режиме чтения using (ZipArchive zipArchive = ZipFile.OpenRead(archivePath)) { // проход циклом всех сущностей в архиве foreach (ZipArchiveEntry entry in zipArchive.Entries) { // вывод полного пути к файлу в рамках архива Console.WriteLine(entry.FullName); } } } } }
Извлечение файлов из архива
using System.IO.Compression; namespace Zip { class Program { static void Main(string[] args) { // путь к архиву const string archivePath = @"D:\\archive.zip"; // путь к папке const string directoryPath = @"D:\\folder"; // вызов метода для извлечения файлов из архива ZipFile.ExtractToDirectory(archivePath, directoryPath); } } }
Также вы можете получить дополнительную информацию тут.
.