複数の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アーカイブを抽出し、そのコンテンツを個別のフォルダーに保存します。以下は、C#でネストされたZIPアーカイブを抽出する手順です。
- まず、FileStreamオブジェクトを作成してZIPファイルをロードします。
- 次に、Archiveクラスを使用してZIPファイルをロードします。
- Archive.Entriesコレクションの各ArchiveEntryを繰り返し処理します。
- コレクション内のZIPアーカイブをフィルタリングし、アーカイブごとに次の手順を実行します。
- MemoryStreamオブジェクトを作成し、ArchiveEntry.Open().CopyTo(Stream)メソッドを使用してアーカイブエントリをそのオブジェクトにコピーします。
- Archiveクラスのインスタンスを作成して、ネストされたアーカイブをロードします。
- 最後に、Archive.ExtractToDirectory(string)メソッドを使用してアーカイブをフォルダーに抽出します。
次のコードサンプルは、ネストされた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アーカイブのスクリーンショットです。
無料のAPIライセンスを取得する
無料の一時ライセンスを取得して、評価の制限なしにAspose.ZIPfor.NETを使用できます。
結論
この記事では、C#でネストされたZIPアーカイブを抽出する方法を学習しました。ステップバイステップガイドとコードサンプルは、ネストされた各アーカイブを個別のフォルダーに解凍する方法を示しています。さらに、ドキュメントにアクセスして、Aspose.ZIPfor.NETの他の機能を調べることができます。また、フォーラムから質問することもできます。