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

Введение

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

Почему стоит создать плоский ZIP?

Создание плоского ZIP-архива предлагает несколько преимуществ:

  • Упрощает управление ZIP-файлами: Снижает сложность при работе с несколькими файлами.
  • Извлекает все вложенные ZIP-содержимое в один архив: Консолидирует файлы для более легкого доступа.
  • Снижает избыточные структуры папок: Оптимизирует организацию файлов.

Содержание

  1. Настройка обработки ZIP-архивов в C#
  2. Шаги для создания плоского ZIP-архива
  3. Сохранение упрощенного ZIP-файла
  4. Пакетная обработка нескольких ZIP-архивов
  5. Получение бесплатной лицензии API
  6. Заключение и дополнительные ресурсы

1. Настройка обработки ZIP-архивов в C#

Чтобы эффективно обрабатывать вложенные ZIP-архивы, мы будем использовать Aspose.ZIP для .NET. Эта мощная библиотека предоставляет:

  • Автоматизированное извлечение и повторное сжатие ZIP.
  • Поддержка нескольких форматов архивов: ZIP, TAR, GZip и других.
  • Эффективная обработка больших архивов.

Установка

Вы можете легко установить библиотеку через NuGet:

PM> Install-Package Aspose.Zip

В качестве альтернативы, вы можете скачать DLL с страницы загрузок Aspose.


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

Рассмотрим следующую вложенную ZIP-структуру:

parent.zip
 ├ first.txt
 ├ inner.zip
 │ ├ file1.exe
 │ └ data.bin
 └ picture.gif

После упрощения все внутренние ZIP-содержимое будет консолидировано в родительский ZIP:

flattened.zip
 ├ first.txt
 ├ picture.gif
 ├ file1.exe
 └ data.bin

Пример кода

Вот как вы можете автоматизировать извлечение вложенных ZIP-файлов:

// Загрузите родительский ZIP-файл
using (Archive parentZip = new Archive("parent.zip"))
{
    List<ArchiveEntry> toDelete = new List<ArchiveEntry>();
    List<string> newEntryNames = new List<string>();
    List<MemoryStream> newStreams = new List<MemoryStream>();

    foreach (ArchiveEntry entry in parentZip.Entries)
    {
        if (entry.Name.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
        {
            toDelete.Add(entry);
            using (MemoryStream zipStream = new MemoryStream())
            {
                entry.Open().CopyTo(zipStream);
                zipStream.Position = 0;
                using (Archive innerZip = new Archive(zipStream))
                {
                    foreach (ArchiveEntry innerEntry in innerZip.Entries)
                    {
                        using (MemoryStream entryStream = new MemoryStream())
                        {
                            innerEntry.Open().CopyTo(entryStream);
                            newEntryNames.Add(innerEntry.Name);
                            newStreams.Add(entryStream);
                        }
                    }
                }
            }
        }
    }

    foreach (var entry in toDelete)
        parentZip.DeleteEntry(entry);

    for (int i = 0; i < newEntryNames.Count; i++)
        parentZip.CreateEntry(newEntryNames[i], newStreams[i]);

    parentZip.Save("flattened.zip");
}

Этот метод эффективно автоматизирует извлечение вложенных ZIP-файлов, обеспечивая плавный рабочий процесс.


3. Сохранение упрощенного ZIP-файла

После того как вы извлекли вложенное ZIP-содержимое, сохраните упрощенный ZIP-файл, используя следующую строку кода:

parentZip.Save("flattened.zip");

Это гарантирует, что у вас есть один ZIP-архив без вложенных папок, что значительно упрощает управление файлами.


4. Пакетная обработка нескольких ZIP-архивов

Если вам нужно упростить несколько ZIP-архивов, находящихся в определенной папке, вы можете использовать следующий фрагмент кода:

string[] files = Directory.GetFiles("zip_folder", "*.zip");
foreach (string file in files)
{
    using (Archive archive = new Archive(file))
    {
        archive.ExtractToDirectory("output_folder");
    }
}

Этот метод позволяет автоматизировать массовую обработку ZIP, экономя ваше время и усилия.


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

Чтобы разблокировать все функции Aspose.ZIP, вы можете запросить бесплатную временную лицензию.

Для получения подробной документации посетите Руководство Aspose.ZIP. Если у вас есть какие-либо вопросы, не стесняйтесь обращаться к сообществу на форуме Aspose.


6. Заключение и дополнительные ресурсы

Резюме

В этом руководстве мы рассмотрели:

Как упрощать ZIP-файлы в C#
Извлечение вложенных ZIP-архивов
Сохранение окончательного ZIP-архива
Обработка нескольких ZIP-файлов одновременно

С Aspose.ZIP для .NET вы можете эффективно извлекать и управлять ZIP-архивами в ваших приложениях. Начните оптимизировать ваши рабочие процессы обработки ZIP сегодня!