C#でフラットZIPアーカイブを作成する

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アーカイブを作成する方法は次のとおりです:

  1. 親ZIPアーカイブを読み込む: Archiveクラスを使用して親ZIPを読み込みます。
  2. リストを初期化する: 次の内容を格納するリストを作成します:
    • 親ZIPから削除するエントリ
    • 抽出されたエントリとその名前
  3. アーカイブエントリを繰り返す: 親ZIPの各ArchiveEntryArchive.Entriesコレクションを使用してループします。
  4. 各エントリを処理する:
    • エントリがZIPアーカイブであるかを確認します。ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase)を使用します。
    • もしそうであれば、削除するエントリのリストに追加します。
    • ArchiveEntry.Open().CopyTo(MemoryStream)を使用して、エントリをMemoryStreamオブジェクトに開きます。
    • 内側のZIPアーカイブのエントリを繰り返し、次の操作を行います:
      • 各エントリの名前を追加するリストに追加します。
      • ArchiveEntry.Open().CopyTo(MemoryStream)を使用して、各エントリをMemoryStreamに読み込みます。
      • 親ZIPに追加するエントリのリストにエントリを追加します。
  5. 内側のZIPエントリを削除する: 内側のZIPアーカイブのリストをループし、Archive.DeleteEntry(ArchiveEntry)メソッドを使用して各エントリを削除します。
  6. 新しいエントリを親ZIPに追加する: 追加するエントリのリストをループし、Archive.CreateEntry(String, Stream)メソッドを使用して各エントリを含めます。
  7. 親ZIPアーカイブを保存する: 最後に、Archive.Save(String)メソッドを使用して、修正された親ZIPアーカイブを保存します。

C#でフラットZIPアーカイブを作成する方法を示すコードサンプルは次のとおりです:

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

評価制限なしでAspose.ZIP for .NETを使用するための無料の一時ライセンスを取得できます。

結論

このチュートリアルでは、C#を使用して効率的にフラットZIPアーカイブを作成する方法を学びました。内側のZIPアーカイブを親ZIPに抽出するプロセスを示し、ネストされたフォルダーを効果的に回避しました。詳細については、Aspose.ZIP for .NETのドキュメントを確認するか、フォーラムを通じてお問い合わせください。

関連情報