
ZIPアーカイブを扱う際、ZIPファイルが他のZIPファイルを含む状況に遭遇することがあります。これにより、ネストされた構造が生じます。すべての内側のZIPアーカイブを外側のアーカイブに抽出することで、これを簡素化したい場合は、正しい場所にいます。この記事では、強力なAspose.ZIP for .NETを使用してC#でフラットZIPアーカイブを作成する方法を探ります。
目次
フラットZIPアーカイブを作成するための.NET APIの概要
フラット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から削除するエントリ
- 抽出されたエントリとその名前
- アーカイブエントリを反復処理: Archive.Entriesコレクションを使用して、親ZIP内の各ArchiveEntryをループします。
- 各エントリを処理:
- エントリが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のドキュメントを確認するか、フォーラムを通じてお問い合わせください。
関連情報
これらの手順に従うことで、アプリケーションでC#フラットZIPファイル圧縮を簡単に実装でき、効率的で管理しやすい単一ファイルのZIPアーカイブを確保できます。