Создание плоского 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, или свяжитесь с нами через наш форум.

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

Следуя этим шагам, вы можете легко реализовать сжатие плоского zip файла C# в ваших приложениях, обеспечивая один zip архив, который является как эффективным, так и простым в управлении.