Это должно предоставить образец того, как рассчитать текущий процент операции извлечения. Благодаря @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.
}
'IArchive.WriteToDirectory()' просто перебирает все записи в архиве и называет 'WriteToDirectory()' на каждом. Внесите это вручную, если вы хотите сообщить о прогрессе (т. Е. Сколько записей вы извлекли до сих пор) –
Однако одна запись может быть больше, чем другая! –
нравится, гораздо больше: 12 МБ и 1 ГБ –