Отчет о ходе сжатия
Обработчик событий прогресса
Процесс сжатия может занять много времени, особенно если размер данных огромен. Для zip-архива существует событие CompressionProgressed, чтобы оставаться в курсе. Это событие зависит от ProgressEventArgs, который содержит количество обработанных на данный момент байтов. Вот как мы можем подписаться на это событие, используя лямбда-выражение:
1 запись.CompressionProgressed += (s, e) => {
2 Console.WriteLine(string.Format("{0} байт сжато", e.ProceededBytes));
3 };
Отчет о проценте выполнения почтового индекса
Каждый раз, когда возникает событие CompressionProgressed, мы делим число ProceededBytes на длину исходного файла. Именно такое соотношение сжатых байт мы находим на данный момент. Вот полный образец.
Шаги: Отчет о проценте выполнения Zip в C#
- Откройте файл Hug.bin в режиме чтения с помощью File.Open, чтобы подготовить его к сжатию.
- Инициализируйте новый экземпляр класса Archive, указав PPMdCompressionSettings для сжатия.
- Создайте запись в архиве для файла Hug.bin с помощью метода CreateEntry, связав ее с потоком исходного файла.
- Прикрепите обработчик событий к событию CompressionProgressed, чтобы отслеживать ход сжатия. Он вычисляет процент сжатого файла на данный момент.
- В обработчике событий обновите процент сжатия и отображайте его в консоли при каждом увеличении прогресса.
- После завершения сжатия сохраните архив в указанный zip-файл.
1 используя (Источник FileStream = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
2 {
3 используя (var archive = новый архив (новый ArchiveEntrySettings (новый PPMdCompressionSettings())))
4 {
5 Запись ArchiveEntry = archive.CreateEntry("huge.bin", source);
6 ИНТ процентовReady = 0;
7 запись.CompressionProgressed += (s, e) =>
8 {
9 int процент = (int)((100 * (long)e.ProceededBytes) / source.Length);
10 если (процент > процентReady)
11 {
12 Console.WriteLine(string.Format("Сжатие {0}%", процент));
13 процентReady = процент;
14 }
15 };
16 архив.Сохранить(zipFile);
17 }
18 }
Отчет о проценте выполнения 7z
Аналогичный подход и для архива 7z. Его запись имеет собственное событие CompressionProgressed.
Шаги: Мониторинг хода сжатия с помощью LZMA2 в архиве 7z на C#</ а>
- Откройте исходный файл (huge.bin) в режиме чтения.
- Создайте объект SevenZipArchive, используя настройки сжатия LZMA2.
- Добавьте исходный файл в архив как запись с помощью метода CreateEntry.
- Подпишитесь на событие CompressionProgressed, чтобы отслеживать и рассчитывать ход сжатия.
- Для каждого обновления хода рассчитывайте процент завершения сжатия.
- Сохраните архив в указанное место (zipFile).
1используя (Источник FileStream = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
2 {
3 используя (var archive = новый SevenZipArchive (новый SevenZipEntrySettings (новый SevenZipLZMA2CompressionSettings())))
4 {
5 Запись SevenZipArchiveEntry = archive.CreateEntry("huge.bin", source);
6 ИНТ процентовReady = 0;
7 запись.CompressionProgressed += делегат (объект s, ProgressEventArgs e)
8 {
9 // s — SevenZipArchiveEntry
10 int процент = (int)((100 * (long)e.ProceededBytes) / source.Length);
11 если (процент > процентReady)
12 {
13 процентReady = процент;
14 }
15 };
16 архив.Сохранить(zipFile);
17 }
18 }