При работе с ZIP-архивами вы можете столкнуться с ситуацией, когда ZIP-файл содержит другие ZIP-файлы, создавая вложенную структуру. Если вы хотите упростить это, извлекая все внутренние ZIP-архивы во внешний архив, вы находитесь в правильном месте. В этой статье мы рассмотрим как создать плоский ZIP-архив на C# с использованием мощной библиотеки Aspose.ZIP для .NET.
Содержание
- Обзор .NET API для создания плоских ZIP-архивов
- Шаги для создания плоского ZIP-архива
- Получите бесплатную лицензию API
- Заключение
- Смотрите также
Обзор .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#:
- Загрузите родительский ZIP-архив: Используйте класс Archive для загрузки родительского ZIP.
- Инициализируйте списки: Создайте списки для хранения:
- Записей, которые нужно удалить из родительского ZIP
- Извлеченных записей и их имен
- Итерация по записям архива: Переберите каждую ArchiveEntry в родительском ZIP, используя коллекцию Archive.Entries.
- Обработка каждой записи:
- Проверьте, является ли запись ZIP-архивом, используя
ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase)
. - Если это так, добавьте ее в список записей для удаления.
- Откройте запись в объекте MemoryStream с помощью
ArchiveEntry.Open().CopyTo(MemoryStream)
. - Переберите записи внутреннего ZIP-архива, выполняя следующее:
- Добавьте имя каждой записи в список записей для добавления.
- Загрузите каждую запись в
MemoryStream
, используяArchiveEntry.Open().CopyTo(MemoryStream)
. - Добавьте запись в список записей для добавления в родительский ZIP.
- Проверьте, является ли запись ZIP-архивом, используя
- Удалите внутренние ZIP-записи: Переберите список внутренних ZIP-архивов и удалите каждую запись, используя метод Archive.DeleteEntry(ArchiveEntry).
- Добавьте новые записи в родительский ZIP: Переберите список записей для добавления и включите каждую запись с помощью метода Archive.CreateEntry(String, Stream).
- Сохраните родительский ZIP-архив: Наконец, сохраните измененный родительский ZIP-архив с помощью метода Archive.Save(String).
Вот образец кода, демонстрирующий, как создать плоский ZIP-архив на C#:
Получите бесплатную лицензию API
Вы можете получить бесплатную временную лицензию для использования Aspose.ZIP для .NET без каких-либо ограничений на оценку.
Заключение
В этом учебном пособии вы узнали, как эффективно создать плоский ZIP-архив на C#. Мы продемонстрировали процесс извлечения внутренних ZIP-архивов в родительский ZIP, эффективно избегая вложенных папок. Для получения дополнительной информации вы можете ознакомиться с документацией Aspose.ZIP для .NET, или обратиться к нам через наш форум.