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