Как узнать размер распакованного zip-файла?
Использовал библиотеку ZipTV v2.52
Там эта проблема решается перебором всех
файлов в архиве и суммированием их размеров.
ZipTV1.GetFileUnpackedSize(path)
Zip-архиве может быть большое количество файлов, на определение размера каждого файла в архиве тратится 0.1 - 0.3 секунды.
Представьте себе сколько надо времени, если файлов в архиве 15 000!
Существуют ли быстрые способы определения размера распакованного zip-файла?
С уважением Тарас,
[EMAIL]tarnet@pisem.net[/EMAIL]
И помог мне в этом компонент TFindFile
библиотеки ZipTV 2.52
Код выглядит так
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ztvMain, ztvBase, ztvFindFile, ztvZipTV;
type
TForm1 = class(TForm)
Button1 TButton;
FindFile1 TztvFindFile;
procedure Button1Click(Sender TObject);
procedure FindFile1FoundFile(Sender TObject);
procedure FindFile1Deactivate(Sender TObject);
procedure FindFile1CurrentFile(Sender TObject; Filename String);
procedure FindFile1Activate(Sender TObject); //без этого обработчика события, FindFile1 работать не будет !!!
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 TForm1;
TotalUnpackedSize Integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender TObject);
begin
FindFile1.RootDir = 'C\ZipTV\demos\fileinarc'; //стартовый директорий
FindFile1.FileSpec.Clear;
FindFile1.FileSpec.Add( '*.*' );
FindFile1.Find( 'info.zip' ); //в директории сканировать только определенный zip - файл
end;
procedure TForm1.FindFile1FoundFile(Sender TObject);
var ZipTV TZipTV;
begin
ZipTV = TZipTV( Sender );
TotalUnpackedSize = TotalUnpackedSize + ZipTV.UnpackedSize;
end;
procedure TForm1.FindFile1Deactivate(Sender TObject);
begin
ShowMessage(IntToStr(TotalUnpackedSize));
end;
procedure TForm1.FindFile1Activate(Sender TObject);
begin
TotalUnpackedSize = 0;
end;
procedure TForm1.FindFile1CurrentFile(Sender TObject; Filename String);
begin
//наличие этого обработчика обязательно...
end;
Тарас, [EMAIL]tarnet@pisem.net[/EMAIL]