Мы часто сталкиваемся со сценарием, когда несколько архивов 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-архивов в C#.
- Сначала создайте объект FileStream для загрузки ZIP-файла.
- Затем загрузите ZIP-файл, используя класс Архив.
- Перебрать каждую ArchiveEntry в коллекции Archive.Entries.
- Отфильтруйте ZIP-архивы в коллекции и для каждого архива выполните следующие действия:
- Создайте объект MemoryStream и скопируйте в него запись архива с помощью метода ArchiveEntry.Open().CopyTo(Stream).
- Создайте экземпляр класса Архив для загрузки вложенного архива.
- Наконец, распакуйте архив в папку, используя метод Archive.ExtractToDirectory(string).
В следующем примере кода показано, как распаковать вложенные 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-архивов.
Получите бесплатную лицензию API
Вы можете получить бесплатную временную лицензию на использование Aspose.ZIP для .NET без ограничений на пробную версию.
Вывод
В этой статье вы узнали, как извлекать вложенные ZIP-архивы в C#. Пошаговое руководство и пример кода продемонстрировали, как распаковать каждый вложенный архив в отдельную папку. Кроме того, вы можете посетить документацию, чтобы изучить другие функции Aspose.ZIP для .NET. Также вы можете задать свои вопросы через наш форум.