複数のZIPアーカイブが別のZIP内にカプセル化されるシナリオによく遭遇します。このような場合、最初に親ZIPを抽出し、次にネストされたアーカイブを1つずつ抽出する必要があります。作業を簡単にするために、この記事では、複雑なコードを記述せずに、C#.NETでネストされたZIPアーカイブを抽出する方法を示します。

ネストされたZIPアーカイブを抽出するためのC#.NET API

ネストされたZIPアーカイブを解凍するには、Aspose.ZIP for.NETを利用します。 APIは、.NETアプリケーション内からアーカイブ操作を実行するように設計されています。これにより、人気のあるアーカイブ形式をシームレスに作成および操作できます。 APIのDLLをダウンロードするか、NuGetを使用してインストールできます。

PM> Install-Package Aspose.Zip

ネストされたZIPアーカイブをC#で抽出する

ネストされたZIPアーカイブの抽出を示すために、3つのエントリを含む次のZIPファイルを作成しました。

ネストされたZIPアーカイブ

ネストされたZIPアーカイブ

ネストされた各ZIPアーカイブを抽出し、そのコンテンツを個別のフォルダーに保存します。以下は、C#でネストされたZIPアーカイブを抽出する手順です。

  • まず、FileStreamオブジェクトを作成してZIPファイルをロードします。
  • 次に、Archiveクラスを使用してZIPファイルをロードします。
  • Archive.Entriesコレクションの各ArchiveEntryを繰り返し処理します。
  • コレクション内のZIPアーカイブをフィルタリングし、アーカイブごとに次の手順を実行します。

次のコードサンプルは、ネストされたZIPアーカイブをC#.NETで解凍する方法を示しています。

// ファイルストリームでZIPファイルを開く
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
    // アーカイブクラスを使用してZIPファイルをロードする
    using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
    {
        // ZIPアーカイブの各エントリにアクセスする
        foreach(ArchiveEntry entry in archive.Entries)
        {
            if(entry.Name.ToLower().Contains(".zip"))
            {
                // ネストされたアーカイブのメモリストリームを作成する
                MemoryStream nestedArchiveStream = new MemoryStream();

                // アーカイブをメモリストリームにコピーします
                entry.Open().CopyTo(nestedArchiveStream);

                // ネストされたアーカイブをメモリストリームからロードする
                using (var nestedArchive = new Archive(nestedArchiveStream))
                {
                    // アーカイブをディスクに抽出します。
                    nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
                }                               

            }

        } 
    }
}

以下は、抽出されたZIPアーカイブのスクリーンショットです。

C#.NETでネストされたZIPアーカイブを抽出する

解凍されたネストされたアーカイブ

無料のAPIライセンスを取得する

無料の一時ライセンスを取得して、評価の制限なしにAspose.ZIPfor.NETを使用できます。

結論

この記事では、C#でネストされたZIPアーカイブを抽出する方法を学習しました。ステップバイステップガイドとコードサンプルは、ネストされた各アーカイブを個別のフォルダーに解凍する方法を示しています。さらに、ドキュメントにアクセスして、Aspose.ZIPfor.NETの他の機能を調べることができます。また、フォーラムから質問することもできます。

関連項目