Создание плоского ZIP-архива на C#

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

Содержание

Обзор .NET API для создания плоских ZIP-архивов

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

PM> Install-Package Aspose.Zip

Шаги для создания плоского ZIP-архива на C#

Чтобы лучше понять структуру плоского ZIP-архива, рассмотрим следующий пример. Изначально у нас есть ZIP-архив, содержащий другой ZIP-архив:

parent.zip
 ├ first.txt
 ├ inner.zip
 │ ├ game.exe
 │ └ subitem.bin
 └ picture.gif

После преобразования этого ZIP-архива в плоскую структуру все записи из внутреннего ZIP будут извлечены во внешний ZIP, что приведет к следующей структуре:

flatten.zip
 ├ first.txt
 ├ picture.gif
 ├ game.exe
 └ subitem.bin

Шаги реализации

Вот как программно создать плоский ZIP-архив на C#:

  1. Загрузите родительский ZIP-архив: Используйте класс Archive для загрузки родительского ZIP.
  2. Инициализируйте списки: Создайте списки для хранения:
    • Записей, которые нужно удалить из родительского ZIP
    • Извлеченных записей и их имен
  3. Итерация по записям архива: Переберите каждую ArchiveEntry в родительском ZIP, используя коллекцию Archive.Entries.
  4. Обработка каждой записи:
    • Проверьте, является ли запись ZIP-архивом, используя ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase).
    • Если это так, добавьте ее в список записей для удаления.
    • Откройте запись в объекте MemoryStream с помощью ArchiveEntry.Open().CopyTo(MemoryStream).
    • Переберите записи внутреннего ZIP-архива, выполняя следующее:
      • Добавьте имя каждой записи в список записей для добавления.
      • Загрузите каждую запись в MemoryStream, используя ArchiveEntry.Open().CopyTo(MemoryStream).
      • Добавьте запись в список записей для добавления в родительский ZIP.
  5. Удалите внутренние ZIP-записи: Переберите список внутренних ZIP-архивов и удалите каждую запись, используя метод Archive.DeleteEntry(ArchiveEntry).
  6. Добавьте новые записи в родительский ZIP: Переберите список записей для добавления и включите каждую запись с помощью метода Archive.CreateEntry(String, Stream).
  7. Сохраните родительский ZIP-архив: Наконец, сохраните измененный родительский ZIP-архив с помощью метода Archive.Save(String).

Вот образец кода, демонстрирующий, как создать плоский ZIP-архив на C#:

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

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

Заключение

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

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