Мы часто сталкиваемся со сценарием, когда несколько архивов ZIP инкапсулированы в другой ZIP. В таких случаях сначала нужно распаковать родительский ZIP-архив, а затем один за другим вложенные архивы. Чтобы упростить вам задачу, в этой статье мы покажем, как извлечь вложенные ZIP-архивы в C# .NET без написания сложного кода.

C# .NET API для извлечения вложенных ZIP-архивов

Чтобы разархивировать вложенные ZIP-архивы, мы будем использовать Aspose.ZIP для .NET. API предназначен для выполнения операций архивирования из приложений .NET. Это позволяет вам легко создавать и управлять популярными форматами архивов. Вы можете либо скачать библиотеку DLL API, либо установить ее с помощью NuGet.

PM> Install-Package Aspose.Zip

Извлечение вложенных ZIP-архивов в C#

Чтобы продемонстрировать извлечение вложенных ZIP-архивов, мы создали следующий ZIP-файл, содержащий 3 записи.

Вложенные ZIP-архивы

Вложенные ZIP-архивы

Мы извлечем каждый вложенный ZIP-архив и сохраним его содержимое в отдельной папке. Ниже приведены шаги для извлечения вложенных ZIP-архивов в C#.

  • Сначала создайте объект FileStream для загрузки ZIP-файла.
  • Затем загрузите ZIP-файл, используя класс Архив.
  • Перебрать каждую ArchiveEntry в коллекции Archive.Entries.
  • Отфильтруйте ZIP-архивы в коллекции и для каждого архива выполните следующие действия:

В следующем примере кода показано, как распаковать вложенные ZIP-архивы в C# .NET.

// Открыть ZIP-файл в файловом потоке
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
    // Загрузите ZIP-файл, используя класс Archive
    using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
    {
        // Доступ к каждой записи в ZIP-архиве
        foreach(ArchiveEntry entry in archive.Entries)
        {
            if(entry.Name.ToLower().Contains(".zip"))
            {
                // Создать поток памяти для вложенного архива
                MemoryStream nestedArchiveStream = new MemoryStream();

                // Скопировать архив в поток памяти
                entry.Open().CopyTo(nestedArchiveStream);

                // Загрузить вложенный архив из потока памяти
                using (var nestedArchive = new Archive(nestedArchiveStream))
                {
                    // Распаковать архив на диск.
                    nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
                }                               

            }

        } 
    }
}

Ниже приведен скриншот извлеченных ZIP-архивов.

Извлечение вложенных ZIP-архивов в C# .NET

Разархивированные вложенные архивы

Получите бесплатную лицензию API

Вы можете получить бесплатную временную лицензию на использование Aspose.ZIP для .NET без ограничений на пробную версию.

Вывод

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

Смотрите также