Отменить создание 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 }