C#と.NETでアーカイブファイルを抽出

.NETアプリケーションでZIPやその他のアーカイブ形式をプログラムから展開します。

.NETでのアーカイブファイル抽出

Aspose.ZIP for .NETは、C#アプリケーションでアーカイブを開き、その内容を抽出するためのマネージドライブラリです。APIを使用すると、アーカイブエントリを読み取り、すべての項目または選択した項目だけを抽出し、ディレクトリ構造を保持して、結果をフォルダーまたはストリームへ書き込めます。処理はアプリケーション内で完結するため、サーバー側のワークフローはデスクトップソフトウェアやコマンドラインユーティリティに依存しません。

一般的な用途には、ドキュメント取り込み、バックアップ復元、デプロイパッケージ処理、アップロード処理、自動データ交換があります。同じAPIは、ASP.NETサービス、バックグラウンドワーカー、デスクトップアプリケーション、クラウドジョブ、CI/CDパイプラインで利用できます。

具体的なワークフローは形式によって異なります。ZIP、7Z、RAR、TAR、CABは、コンテナー構造、圧縮方式、APIクラスが異なります。この概要では共通の抽出プロセスを説明し、形式別ガイドで各アーカイブ型の正しいクラス、オプション、制限を示します。

アーカイブファイル抽出ツールとは

アーカイブ抽出ツールは、1つ以上のファイルを保持するコンテナーを開き、保存されている内容を復元します。通常はメタデータを読み取り、エントリとディレクトリを識別し、データを展開して、承認された場所に結果を書き込みます。暗号化されたアーカイブでは、有効な資格情報と、その形式でサポートされる設定も必要です。

extractunpackdecompressという用語は、似た操作を指して使われることがあります。ZIPを展開するという場合は、ZIPコンテナーから内容を取り出すことを意味します。アーカイブ抽出はより広い操作であり、7Z、RAR、TAR、CAB、CPIO、XZなども対象に含みます。

本番環境での抽出は、単一のメソッド呼び出しだけではありません。アプリケーションは、エントリ名の検査、個別項目の選択、フォルダー保持、ストリーム受け取り、パスワード処理、失敗報告、制限の適用を、永続ストレージへ書き込む前に行う必要があります。

アーカイブ抽出の仕組み

一般的なC#ワークフローは次の7段階です:

  1. ローカルパス、アップロード、ストリーム、ストレージサービスからアーカイブを受け取る。
  2. アプリケーションがその形式をサポートしているか確認する。
  3. その形式用に設計されたAPIクラスでコンテナーを開く。
  4. フィルターや選択的抽出が必要な場合はエントリを調べる。
  5. ファイルを書き込む前に出力パスとリソース制限を検証する。
  6. 承認されたエントリを分離された出力先へ抽出する。
  7. 出力を次のアプリケーション段階へ渡し、一時データを削除する。

開くためのクラスは入力型によって異なります。ZIP、7Z、RAR、TAR、CABは同じ内部モデルを共有していません。それでもサービス側では、各コンテナーを対応するAspose.ZIP APIへ振り分けながら、統一されたアプリケーションレベルのワークフローを提供できます。

抽出に対応するアーカイブ形式

このライブラリは、ZIP、7Z、RAR、TAR、GZIP、BZIP2、XZ、LZIP、Z、CPIO、CAB、WIMなど、一般的なアーカイブ形式と圧縮形式を扱えます。利用できる操作は形式によって異なります。複数エントリを持つ形式もあれば、単一の圧縮ストリームや、別の圧縮層で包まれたTARコンテナーを表す形式もあります。

ファイル名の拡張子だけに頼らず、実際のコンテナーに合うハンドラーを選択してください。自動パイプラインに追加する前に、必要な操作、暗号化方式、ストリーム動作がその形式でサポートされるか確認します。

一般的なファイル抽出ワークフロー

アーカイブ全体を展開する。 すべてのエントリが必要で、入力が検証済みの場合に完全抽出を使用します。必要に応じて元のディレクトリ階層を保持し、同時リクエストで出力が上書きまたは混在しないよう、ジョブごとに一意の出力先を割り当てます。

選択したエントリだけを読み取る。 Archive.Entriesを調べ、データを書き込む前にアプリケーションのルールを適用します。パッケージに多数のアセットが含まれていても、処理に必要なのがドキュメント、マニフェスト、設定ファイル、既知フォルダーだけの場合に有効です。

ストリームを処理する。 ストリーム入力は、ASP.NETアップロード、オブジェクトストレージ、データベース、メッセージ駆動システムに適しています。ストリームの所有権とライフタイムを明確にし、サイズ制限のないアーカイブ全体をメモリに読み込まないでください。

保護されたコンテンツを開く。 対象形式で利用できる復号設定を通じて資格情報を渡します。パスワードは保護された構成またはシークレットストアから取得し、ログに書き込まないでください。

大きな入力を制限付きジョブとして扱う。 圧縮サイズ、展開後サイズ、エントリ数、処理時間、一時ストレージ使用量を制限します。拡張子から信頼性を推測せず、制限はアプリケーション側で定義してください。

C#プロジェクトにAspose.ZIPを追加

Windows、Linux、macOS上のサポート対象.NET環境をターゲットにしたC#プロジェクトへ、 Aspose.ZIP NuGetパッケージ をインストールします。その後、必要な名前空間を参照し、入力コンテナーに対応するクラスを選択します。この処理には、ソースへの読み取り権限、出力先への書き込み権限、設定された展開制限に十分な一時ストレージも必要です。

Package Manager Consoleでは次のコマンドを使用します:

Package Manager Console

PM> Install-Package Aspose.Zip

C#例: ZIPファイルを展開

ZIPは共通ワークフローを示す簡潔な例です。このコードは入力を開き、その内容を出力ディレクトリへ書き込みます。外部ファイルでこのパターンを使う前に、コンテナー、出力パス、リソース制限を検証してください。

ZIPの内容をディレクトリへ抽出

using Aspose.Zip;
using System.IO;

string archivePath = Path.GetFullPath("input.zip");
string outputDirectory = Path.GetFullPath("extracted");

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    archive.ExtractToDirectory(outputDirectory);
}

本番環境での安全なアーカイブ抽出

ユーザーや外部システムから受け取ったアーカイブは、信頼できない入力として扱ってください。期待される拡張子であっても、有効または安全なコンテナーである証明にはなりません。選択したハンドラーがデータを解析できることを確認し、破損または未対応の入力は拒否します。

エントリを書き込む前に、承認済みの出力先に対して出力パスを解決します。絶対パス、親ディレクトリへのトラバーサル、そのディレクトリ外を指す結果を拒否してください。これにより、アーカイブ内のファイル名がファイルシステム上の別の場所へ書き込みを誘導することを防げます。

圧縮サイズ、合計およびエントリごとの展開後サイズ、エントリ数、ネスト深度、実行時間、並行処理数に制限を設定します。権限を制限したジョブ専用の一時フォルダーを使用し、検証済みの出力だけを昇格させ、成功時も失敗時も後片付けします。

ログには操作IDと状態情報を記録し、パスワード、非公開ファイル名、抽出内容は記録しないでください。出力を後で解析、プレビュー、スキャンする場合は、各後続コンポーネントを別の信頼境界として扱います。

ブラウザーで抽出を試す

無料のオンライン抽出アプリ では、ソフトウェアをインストールせずにサンプル入力を試せます。C#でワークフローを実装する前に、期待される出力を確認する用途に便利です。

オンラインツールは対話的な作業向けです。.NETライブラリは、反復可能なサービス、バックグラウンド処理、ストレージパイプライン、検証と出力処理をアプリケーション側で制御するエンタープライズ用途向けです。

ファイルタイプ別の抽出ガイド

実装の詳細は、コンテナーと保存されている形式によって変わります。形式別ガイドでは通常、次の内容を示します:

  • アーカイブを開くための正しいAspose.ZIPクラス;
  • 完全抽出と選択的抽出の例;
  • パスワードと暗号化の動作;
  • 必要に応じたストリームベース処理;
  • 形式固有の制限と本番運用上の考慮事項;
  • 関連するAPIリファレンスとドキュメント。

この概要から実装へ進むときは、実際の入力タイプに対応するガイドを使用してください。そうすることで、ZIP固有の前提を7Z、RAR、TAR、CAB、または動作の異なるストリーム圧縮形式へ誤って適用することを避けられます。

ファイル形式別アーカイブ抽出ガイド

ZIPアーカイブに含まれることが多いファイルやアセットのC#抽出ページを確認できます。

アーカイブ抽出リソース

アーカイブ抽出FAQ

1. C#でアーカイブファイルを抽出するには?

Aspose.ZIPをインストールし、形式に対応するクラスで入力を開き、コンテナー全体または選択したエントリを承認済みディレクトリまたはストリームへ抽出します。

2. ZIPアーカイブからファイルを抽出するには?

ZIP入力に対してArchiveインスタンスを作成し、ExtractToDirectoryを呼び出すと全体を展開できます。特定の項目だけを調べて保存する場合はArchive.Entriesを列挙します。

3. アーカイブ抽出とZIP展開は同じですか?

ZIP展開はZIPファイルに特化した操作です。抽出はより広い概念で、7Z、RAR、TAR、CAB、CPIO、WIMなども含みます。

4. .NETアプリケーションでパスワード保護アーカイブを開けますか?

Aspose.ZIPは、該当形式で有効な資格情報と適切な復号設定が提供された場合、パスワードベースのアクセスをサポートします。正確な動作はコンテナー形式によって異なります。

5. ユーザーがアップロードしたアーカイブを安全に抽出するには?

分離された一時ストレージを使用し、すべての出力パスを検証し、許可形式と圧縮/展開後サイズを制限し、処理タイムアウトを設定して、完了後に一時データを削除します。