Обсуждение примеров для пользователей

ProFrager

Знаток
Проверенный
Обсждение примеров для пользователей

AVMan, я извиняюсь, конечно, но
Код:
procedure TForm1.Timer1Timer(Sender: TObject); var ArcSize, MaxSize: Integer;
begin
///////////////////////////////////////////////////////
 ArcSize:= GetSizeFile(Edit1.Text);
 MaxSize:= Round(GetSizeFile(Edit1.Text)-GetSizePath(Edit2.Text));
 ProgressBar1.Max:= Round((ArcSize+MaxSize)*1.1);
 ProgressBar1.Position:= GetSizePath(Edit2.Text);
///////////////////////////////////////////////////////
end;
это бред.
MaxSize:= Round(GetSizeFile(Edit1.Text)-GetSizePath(Edit2.Text));
ближе к концу распаковки второе значение всегда больше первого (распакованные данные больше размера архива). Соответственно MaxSize будет отрицательным.
Максимум в прогрессбаре достигнет при выравнивании размера архива размеру распакованных данных, дальше начинается бред.
Приведу пример: архив 1гб, текущий размер распакованных данных 3гб, а еще реально остается распаковать 2гб (в данном случае энтропия упакованных данных довольно низка). Так вот в этих расчетах получается
MaxSize:= 1гб-3гб=-2гб
ProgressBar1.Max:= (1гб-2гб)*1.1=-1.1гб
ProgressBar1.Position:=3гб
не очень красиво.

Добавлено через 2 минуты
Да и при паре десятков тысяч мелких файлов - измерение текущего размера каталога превращается в ад.
 

GVS276

Старожил
Проверенный
Упс, забыл проверку сделать..

ближе к концу распаковки второе значение всегда больше первого (распакованные данные больше размера архива). Соответственно MaxSize будет отрицательным.
Я знаю, но я лишь не сделал проверку, если размер папки будет совпадать с размером или больше размера архива, то тогда будет переписываться MAX на новое значение...

Да и при паре десятков тысяч мелких файлов - измерение текущего размера каталога превращается в ад.
Проверю у себя..
 
Последнее редактирование:

LexBell

Борода
Супер модератор
AVMan, а получить информацию об архиве заранее? сам 7z это точно умеет.
 
Сверху