2016-04-17 5 views
1
IArchive rar = SharpCompress.Archive.Rar.RarArchive.Open(new FileInfo("ze.rar"), SharpCompress.Common.Options.None); 
     rar.WriteToDirectory(Directory.GetCurrentDirectory() + "\\DATA", SharpCompress.Common.ExtractOptions.Overwrite); 

С приведенным выше кодом я могу извлечь файл rar, однако я хотел бы показать прогресс через консоль. Как я могу проверить прогресс?C# sharpcompress: Как проверить прогресс

+1

'IArchive.WriteToDirectory()' просто перебирает все записи в архиве и называет 'WriteToDirectory()' на каждом. Внесите это вручную, если вы хотите сообщить о прогрессе (т. Е. Сколько записей вы извлекли до сих пор) –

+0

Однако одна запись может быть больше, чем другая! –

+0

нравится, гораздо больше: 12 МБ и 1 ГБ –

ответ

0

Это должно предоставить образец того, как рассчитать текущий процент операции извлечения. Благодаря @MathiasRJessen для указания поведения расширения IArchive.WriteToDirectory.

IArchive rar = SharpCompress.Archive.Rar.RarArchive.Open(new FileInfo("ze.rar"), SharpCompress.Common.Options.None); 
string directory = Path.Combine(Directory.GetCurrentDirectory(), "DATA"); 

// Calculate the total extraction size. 
double totalSize = rar.Entries.Where(e => !e.IsDirectory).Sum(e => e.Size); 
long completed = 0; 

// Use the same logic for extracting each file like IArchive.WriteToDirectory extension. 
foreach (var entry in rar.Entries.Where(e => !e.IsDirectory)) 
{ 
    entry.WriteToDirectory(directory, ExtractOptions.Overwrite); 

    // Track each individual extraction. 
    completed += entry.Size; 
    var percentage = completed/totalSize; 
    // TODO do something with percentage. 
} 
+0

Это не работает, если вы пытаетесь получить процент от одного большого распакованного файла. – CJackson234

+0

Похоже, что IArchiveEntry предоставляет метод 'OpenEntryStream'. Это можно использовать для отслеживания прогресса отдельных записей, поскольку данные копируются из потока в целевой файл. – joncloud