Эта проблема решена. Моя ошибка заключалась в том, что в моем втором блоке кода я использовал SaveProgress вместо ExtractProgress, и перед настройкой обработчика событий я использовал Zip.ExtractAll. Спасибо Bradley Moorfield за помощь.DotNetZip - Показывает ход извлечения?
Так что я использую библиотеку DotNetZip для сжатия/извлечения zip-файлов по всему моему коду. Я был в состоянии достигнуть, показывающий процент сжатия с этим кодом:
using (ZipFile zip = new ZipFile())
{
zip.AddDirectory(filePath);
var mb = GetDirectorySize(filePath)/1048576;
long timesRunNeeded = mb/100;
if (mb % 100 > 0) { timesRunNeeded++; }
if (mb <= 100) { timesRunNeeded = 1; }
int timesRun = 1;
int pastP = 0;
zip.SaveProgress += (o, args) =>
{
var percentage = (int)(1.0d/args.TotalBytesToTransfer * args.BytesTransferred * 100.0d);
if (pastP != percentage)
{
clearLine();
setColor(ConsoleColor.Gray); Console.Write(" Percentage: "); setColor(ConsoleColor.Green);
Console.Write(percentage + " [" + timesRun + "/" + timesRunNeeded + "]");
if ((percentage == 100) && (pastP >= 0) && (pastP <= 99))
{
timesRun++;
}
}
pastP = percentage;
};
zip.Save(filePath + ".zip");
}
Причина, по которой, как это beacuse он сжимает 100 мб в то время, так что, например, если папка была 2153 Мб, это d перейти на 100% 22 раза. Это все работает отлично, и мне нравится, как у меня есть, но у меня есть некоторые проблемы с отображением процента, сделанного при извлечении из zip в каталог. Вот мой код до сих пор:
using (ZipFile zip = ZipFile.Read(filePath))
{
Directory.CreateDirectory(filePath.Replace(".zip", ""));
zip.ExtractAll(filePath.Replace(".zip", ""), ExtractExistingFileAction.OverwriteSilently);
zip.SaveProgress += (o, args) =>
{ //Fix this, not showing percentage of extraction.
var percentage = (int)(1.0d/args.TotalBytesToTransfer * args.BytesTransferred * 100.0d);
clearLine();
Console.Write(percentage);
};
}
По какой-то причине этот код не печатает какой-либо процент на всех, поэтому я предполагаю, что это что-то делать с тем, как я на самом деле вычислительным процентом получило. Должно ли быть другим при сжатии и экстракции? Заранее спасибо.
Вам нужно добавить обработчик событий, прежде чем приступить к добыче. Кроме того, во время сохранения во время сохранения происходит событие SaveProgress. Существует другой обработчик «ExtractProgress», который запускается во время извлечения. [См. Ссылку, например, использование] (http://dotnetzip.herobo.com/DNZHelp/html/01318049-51bf-3876-e766-ad83e62fdcf5.htm) –
Ах, глупая ошибка на моем конце. Я поменял его обратно на ExtractProgress (который у меня был ранее, но по какой-то причине поменялся): моя реальная проблема заключалась в том, что, как вы сказали, я использовал Zip.ExtractAll перед использованием обработчика событий. Благодаря! Не могли бы вы оставить свой комментарий в качестве ответа, чтобы я мог отметить его как принятый? –