ZIPアーカイブを扱う際、ZIPファイルが他のZIPファイルを含んでいるシナリオに遭遇することがあります。これにより、ネストされた構造が作成されます。すべての内側のZIPアーカイブを外側のアーカイブに抽出することで、この構造を簡素化したい場合は、正しい場所にいます。この記事では、強力なAspose.ZIP for .NETを使用して、C#でフラットZIPアーカイブを作成する方法を探ります。
目次
.NET APIを使用してフラットZIPアーカイブを作成する概要
フラットZIPアーカイブを作成するために、Aspose.ZIP for .NETライブラリを利用します。この堅牢なアーカイブAPIを使用すると、ZIP、TAR、GZip、7zなど、さまざまなアーカイブ形式を作成および抽出できます。このライブラリは、NuGetから簡単にインストールするか、ダウンロードセクションからDLLをダウンロードできます。
PM> Install-Package Aspose.Zip
C#でフラットZIPアーカイブを作成する手順
フラット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
実装手順
C#でプログラム的にフラットZIPアーカイブを作成する方法は次のとおりです:
- 親ZIPアーカイブを読み込む: Archiveクラスを使用して親ZIPを読み込みます。
- リストを初期化する: 次の内容を格納するリストを作成します:
- 親ZIPから削除するエントリ
- 抽出されたエントリとその名前
- アーカイブエントリを繰り返す: 親ZIPの各ArchiveEntryをArchive.Entriesコレクションを使用してループします。
- 各エントリを処理する:
- エントリがZIPアーカイブであるかを確認します。
ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase)
を使用します。 - もしそうであれば、削除するエントリのリストに追加します。
ArchiveEntry.Open().CopyTo(MemoryStream)
を使用して、エントリをMemoryStreamオブジェクトに開きます。- 内側のZIPアーカイブのエントリを繰り返し、次の操作を行います:
- 各エントリの名前を追加するリストに追加します。
ArchiveEntry.Open().CopyTo(MemoryStream)
を使用して、各エントリをMemoryStream
に読み込みます。- 親ZIPに追加するエントリのリストにエントリを追加します。
- エントリがZIPアーカイブであるかを確認します。
- 内側のZIPエントリを削除する: 内側のZIPアーカイブのリストをループし、Archive.DeleteEntry(ArchiveEntry)メソッドを使用して各エントリを削除します。
- 新しいエントリを親ZIPに追加する: 追加するエントリのリストをループし、Archive.CreateEntry(String, Stream)メソッドを使用して各エントリを含めます。
- 親ZIPアーカイブを保存する: 最後に、Archive.Save(String)メソッドを使用して、修正された親ZIPアーカイブを保存します。
C#でフラットZIPアーカイブを作成する方法を示すコードサンプルは次のとおりです:
無料APIライセンスを取得する
評価制限なしでAspose.ZIP for .NETを使用するための無料の一時ライセンスを取得できます。
結論
このチュートリアルでは、C#を使用して効率的にフラットZIPアーカイブを作成する方法を学びました。内側のZIPアーカイブを親ZIPに抽出するプロセスを示し、ネストされたフォルダーを効果的に回避しました。詳細については、Aspose.ZIP for .NETのドキュメントを確認するか、フォーラムを通じてお問い合わせください。