Delphi - Zip fájl valódiságát megállapító komponens készítése

forráskód letöltése
A Zip talán az egyik legelterjedtebb fájl-tömörítő program. Segítségével gyorsan és egyszerűen összetömöríthetjük állományainkat, könyvtárainkat. Mai cikkünkben egy olyan komponenst készítünk, mely képes megállapítani egy állományról, hogy valódi zip fájl-e.
A mellékelt példaprogram megnyitása előtt a ZipFile.pas-ban levő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Ha megvizsgáljuk egy zip fájl tartalmát valamilyen szerkesztőprogramban, láthatjuk, hogy annak első két karaktere P és K. Ez minden ilyen módszerrel tömörített fájl esetében igaz, így ezt alapul véve csak egy vizsgálatot kell elvégeznünk a megadott fájl tartalmára. Azonban ezzel még nem lehetünk elégedettek, ugyanis előfordulhat olyan fájl, például egy szöveges állomány, melynek első két karaktere pont megegyezik ezekkel a betűkkel. Ezért további vizsgálatot kell végeznünk a harmadik és negyedik karakterekre. Ezeknek a #3 és #4 ASCII kódoknak megfelelő karaktereknek kell lenniük. Mindezek tudatában nézzük a függvény felépítését. Bemeneti paraméterként a vizsgálandó fájl nevét várja, és a vizsgálat eredményétől függően egy logikai típusú értéket ad vissza.
function TZipFile.IsZipFile(const fname:string): Boolean;
var
  f : file;
  buf : array [0..3] of char;
begin
  Result:=False;
Amennyiben a vizsgálandó fájl nevét nem adtuk meg, kilépünk a függvényből.
  if fname='' then exit;
Az f változóhoz hozzárendeljük a kapott fájl nevét.
  AssignFile(f, fname);
Megnyitjuk az állományt.
  Reset(f, 1);
Amennyiben a megnyitás nem sikerült, kilépünk a függvényből.
  If ioresult<>0 then exit;
Ellenkező esetben a fájl első 4 karakterét beolvassuk a Buf tömbbe.
  BlockRead(f, buf, 4);
Amennyiben a megadott feltételeknek megfelelő karakterek megtalálhatók a kívánt helyen, a függvény visszatérési értéke igaz lesz.
  if ioresult=0 then
  Result:=(buf[0]='P') and (buf[1]='K') and
          (buf[2]=#3) and (buf[3]=#4);
Végül lezárjuk a fájlt.
  Close(f);
end;
A mellékelt példaprogramban a következőképpen hívjuk meg a függvényt:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Edit1.text<>'' then
    begin
      if ZipFile1.IsZipFile(Edit1.Text) then
        ShowMessage('A kiválasztott állomány valódi zip file.')
      else
        ShowMessage('A kiválasztott állomány nem zip file.')
    end;
end;
Az Edit1-be betöltött fájl nevét adjuk át paraméterként a függvénynek, és annak visszatérési értékétől függően íratjuk ki az üzenetet.