C# 08.01.2020 admin No comments

Работа с zip архивами в C#

Для работы с 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);
        }
    }
}

Также вы можете получить дополнительную информацию тут.

.




1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...