ZIP アーカイブの作成をキャンセルする
Contents
[
Hide
Show
]さまざまな理由で、zip アーカイブの作成をキャンセルしたい場合があります。時間がかかりすぎる場合や、実際にはそこにいくつかのエントリが必要ない場合があります。
概要
アーカイブ関連のイベントのコンテナーである EventsBag クラスがあります。現在、1 つのイベント EntryCompressed がサポートされています。アーカイブ エントリが圧縮された後に発生し、キャンセル可能です。
長いアーカイブの作成をキャンセルします
ZIP アーカイブを約 1 分で作成したいとします。 一部のエントリを圧縮した後、圧縮開始からの時間を確認し、1分以上かかっている場合は処理をキャンセルします。結果のアーカイブには、イベントをトリガーしたエントリを含む圧縮されたエントリがすでに含まれています。
手順: C# で長いアーカイブの作成をキャンセルするには強い>
- 圧縮を処理するために新しい
Archive
オブジェクトを初期化します。 - ストップウォッチを開始して、圧縮プロセスの時間を追跡します。
CreateEntries
メソッドを使用してディレクトリからアーカイブ エントリを作成し、圧縮するフォルダーを指定します。- 圧縮イベントを処理するために「EventsBag」を設定します。
EntryCompressed
イベントのイベント ハンドラーをアタッチします。このイベント ハンドラーは、経過時間が 1 分を超えているかどうかを確認し、必要に応じて操作をキャンセルします。- ストップウォッチを開始し、アーカイブの保存を続行し、「ArchiveSaveOptions」の「EventsBag」を渡します。
1 using (var archive = new Archive())
2 {
3 Stopwatch sw = new Stopwatch();
4
5 archive.CreateEntries(@"D:\BigFolder");
6 EventsBag eb = new EventsBag();
7 eb.EntryCompressed += delegate(object sender, CancelEntryEventArgs args)
8 {
9 if (sw.Elapsed > TimeSpan.FromSeconds(60))
10 args.Cancel = true;
11 };
12 sw.Start();
13 archive.Save("output.zip", new ArchiveSaveOptions() { EventsBag = eb });
14 }
一定の入力後のキャンセル
特定のエントリが圧縮された後にキャンセルしたい場合は、次のスニペットを使用します。
手順: 特定のエントリの作成後にアーカイブの作成をキャンセルするC# で圧縮
- 圧縮を処理するために新しい
Archive
オブジェクトを初期化します。 CreateEntries
メソッドを使用して、指定したディレクトリからファイルを追加します。- 圧縮イベントを管理するために「EventsBag」を設定します。
EntryCompressed
イベントのイベント ハンドラをアタッチします。これは、圧縮されているエントリが特定のファイル名 (例: “last.bin”) と一致するかどうかをチェックします。- 対象のエントリが見つかった場合は、キャンセルをトリガーします。
ArchiveSaveOptions
に含まれるEventsBag
を使用してアーカイブを保存します。
1 using (var archive = new Archive())
2 {
3 archive.CreateEntries(@"D:\BigFolder");
4 EventsBag eb = new EventsBag();
5 eb.EntryCompressed += delegate(object sender, CancelEntryEventArgs args)
6 {
7 if (args.Entry.Name == @"BigFolder\last.bin")
8 args.Cancel = true;
9 };
10 archive.Save("output.zip", new ArchiveSaveOptions() { EventsBag = eb });
11 }