
При работе с 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, или свяжитесь с нами через наш форум.
Смотрите также
- Добавление файлов или папок в ZIP-архивы в C#
- Извлечение файлов из ZIP-архивов с использованием C#
- Объединение нескольких ZIP или TAR архивов в C#
- Создание исполняемого самораспаковывающегося архива в C#
Следуя этим шагам, вы можете легко реализовать сжатие плоского zip файла C# в ваших приложениях, обеспечивая один zip архив, который является как эффективным, так и простым в управлении.