Compute size of file in zip file

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: Source in Pascal

Program: Getfree.pas
File exe: Getfree.exe

This program enables you to know the size of all the programs in ZIP archive.
{ GETFREE.PAS               Copyright (c) TrSek alias Zdeno Sekerak }
{ Program spocita velkost zozipovanych suborov tak, ze rozbali      }
{ ich hlavicky a spocita cisla na pozicii kde je velkost suboru.    }
{ Vytvara pritom subor temporary vyh.$$$.                           }
{                                                                   }
{ Datum:07.10.1994                             http://www.trsek.com }
 
{$M 21192,0,55360}
program vrat_velkost_zipov;
uses crt,dos,trsek;
var f:text;
    s:string;
    i:integer;
    size:longint;
 
procedure chyba(i:integer);
var ch:char;
    schyby:string;
begin
 if i=0 then exit;
 Write('Nastala chyba cislo ', i, ': ' );
 case i of
    2:WriteLn('Nenasiel som soubor.');
    3:WriteLn('Nenasiel som  cestu.');
    5:WriteLn('Zakazany pristup.');
    6:WriteLn('Neplatny deskriptor suboru.');
    8:WriteLn('Nedostatok pameti.');
   10:WriteLn('Neplatne prostredie.');
   11:WriteLn('Neplatny format.');
   18:WriteLn('Dalsie subory neexistuju.');
   94:WriteLn('Nemozem vytvorit subor na cielovom disku.');
   95:WriteLn('Malo miesta na disku pre instalaciu.');
   96:WriteLn('Nemozem vytvorit adresar na cielovom disku.');
  else
   WriteLn('Tuto chybu nemam definovanu.');
  end;
  halt(i);
end;
 
procedure prikaz(s:string);
begin
  SwapVectors;
  Exec(GetEnv('COMSPEC'), '/C '+s);
  SwapVectors;
  if doserror<>0 then chyba(doserror);
  sound(250);delay(30);nosound;
end;
 
function size_zip(cesta:string):longint;
var f:text;
    s:string;
    i:integer;
    velkost:longint;
begin
 s:=cesta;
 prikaz('pkunzip '+s+' -v >vyh.$$$');
 {$I-}
 assign(f,'vyh.$$$');
 reset(f);
 {$I+}
 if ioresult<>0 then chyba(94);
 readln(f,s);
 while (not(eof(f))) do readln(f,s);
 close(f);
 prikaz('del vyh.$$$');
 i:=1;
 while ((s[i] =' ') and (length(s)>i)) do i:=i+1;
 while ((s[i] in ['0'..'9'])  and (length(s)>i)) do i:=i+1;
 s:=copy(s,1,i);
 val(s,velkost,i);
 while ((i>0) and (length(s)>0)) do begin
   delete(s,i,1);
   val(s,velkost,i);
   end;
size_zip:=velkost;
end;
 
begin
 clrscr;
 writeln('Urcim velkost velkost zozipovanych suborov                 Software by TrSek');
 write('Zadaj cestu so zipom :');
 if(ParamCount < 1) then readln(s)
                    else s:=ParamStr(1);
 size:=size_zip(s);
 writeln('Velkost rozipovanych suborov je:',size);
end.