Скасувати створення архіву ZIP
Ви можете скасувати створення zip-архіву з різних причин. Це може зайняти надто багато часу, або вам насправді не потрібні деякі записи.
Огляд
Існує клас EventsBag, який є контейнером для подій, пов’язаних з архівом. Тепер він підтримує одну подію - EntryCompressed. Він виникає після стиснення запису архіву та його можна скасувати.
Скасування створення довгого архіву
Припустімо, ви хочете, щоб ваш ZIP-архів був створений приблизно за хвилину. Після стиснення деякого запису перевірте час, витрачений з початку стиснення, і якщо це зайняло більше хвилини, скасуйте процес. Архів результатів мав би вже стиснути записи, включно з тим, що викликало подію.
Кроки: для скасування створення довгого архіву в C#</ сильний
- Ініціалізуйте новий об’єкт
Архів
для обробки стиснення. - Запустіть секундомір, щоб відстежити тривалість процесу стиснення.
- Створіть записи архіву з каталогу за допомогою методу
CreateEntries
, вказавши папку для стиснення. - Налаштуйте
EventsBag
для обробки подій стиснення. - Приєднайте обробник події для події
EntryCompressed
, який перевіряє, чи час, що минув, перевищує одну хвилину, і за необхідності скасовує операцію. - Запустіть секундомір і продовжуйте збереження архіву, передавши
EventsBag
вArchiveSaveOptions
.
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#
- Ініціалізуйте новий об’єкт
Архів
для обробки стиснення. - Використовуйте метод
CreateEntries
, щоб додати файли з указаного каталогу. - Налаштуйте
EventsBag
для керування подіями стиснення. - Додайте обробник події для події
EntryCompressed
, який перевіряє, чи запис, який стискається, відповідає певній назві файлу (наприклад, “last.bin”). - Якщо цільовий запис знайдено, запустіть скасування.
- Збережіть архів за допомогою
EventsBag
, включеного вArchiveSaveOptions
.
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 }