Spracovanie ZIP archívov

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: KMP (Klub mladých programátorov)

Autor: Ľuboš Saloky
Program: Zipshell.pas
Súbor exe: Zipshell.exe

Spracovanie ZIP archívov.
{ zipshell.pas                                                      }
{ Spracovanie ZIP archivov.                                         }
{                                                                   }
{ Author: Ľuboš Saloky                                              }
{ Datum: 01.01.1996                           http://www.trsek.com  }
 
program Spracovanie_ZIP_archivov;
{$M 16384,0,0}
uses Dos,Crt;
var time,sekundy:real;
    e,hod,min,sec,stot:word;
    d:longint;
    pom:searchrec;
    prep,ciel:string;
    ch:char;
 
procedure adresar(zac:string);
var z:searchrec;
begin
  FindFirst(zac+'*.*',0,z);
  while DosError=0 do begin
    Inc(e);
    if z.Name<>ParamStr(1) then d:=d+z.Size;
    FindNext(z);
  end;
  FindFirst(zac+'*.*',$10,z);
  while DosError=0 do begin
    if (z.attr and directory<>0) and (z.name<>'.') and (z.name<>'..') then adresar(zac+z.name+'\');
    FindNext(z);
  end;
end;
 
BEGIN            {----- hlavny program -----}
  ClrScr;
  prep:='-ex ';
  ciel:='';
  writeln('k - Kompresia: maximálna');
  writeln('c - Cieľový adresár a disk: totožný so zdrojovým');
  writeln('iná klávesa - začiatok komprimácie');
  repeat
    ch:=ReadKey;
    case ch of
      'k':begin
        GotoXY(16,1);
        if prep='-ex ' then begin
          prep:='-en ';
          writeln('normálna ');
        end
        else begin
          prep:='-ex ';
          writeln('maximálna');
        end;
      end;
      'c':begin
        GotoXY(1,4);
        write('Zadaj cieľový adresár a cestu:');
        readln(ciel);
        GotoXY(29,2);
        if ciel='' then writeln('totožný so zdrojovým')
        else writeln(ciel+'                             ');
        GotoXY(1,4);
        DelLine;
      end;
    end;
  until (ch<>'k') and (ch<>'c');
  if ciel<>'' then ciel:=ciel+'\';
  if ciel[1]='a' then prep:=prep+'-&amp; ';
  GetTime(hod,min,sec,stot);
  time:=60*hod+min+sec/60+stot/6000;
  Exec('pkzip.exe',prep+'-p -r '+ciel+ParamStr(1)+' *.*');
  GetTime(hod,min,sec,stot);
  time:=60*hod+min+sec/60+stot/6000-time;
  sekundy:=Frac(time)*60;
  case DosError of
    0:begin
      writeln('Čas komprimácie: ',time:0:0,' minút ',sekundy:0:2,' sekúnd');
      d:=0;e:=0;
      adresar('');
      writeln('Počet súborov: ',e-1);
      FindFirst(ciel+ParamStr(1),$3F,pom);
      writeln('Celková dĺžka: ',d,' skomprimovaná na ',pom.Size);
      writeln('Kompresný pomer: ',pom.Size/d*100:0:2,'%');
      writeln('Rýchlosť komprimácie: ',d/1048576/time:0:3,' MB za minútu');
    end;
    2:writeln('Súbor nenájdený.');
    3:writeln('Cesta k súboru neplatná.');
    5:writeln('Prístup k súboru zakázaný!!!');
    6:writeln('DosError #6: Invalid Handle.');
    8:writeln('Nie je dostatok pamate.');
    10:writeln('DosError #10: Innvalid Environment.');
    11:writeln('DosError #11: Invalid Format.');
    18:writeln('Nie je možné otvoriť viac súborov!!!');
  end;
END.