A típusos fájlok olyan adathalmazok, amelyek azonos típusú adatelemekből épülnek fel. Az adatelemek típusa tetszőleges lehet. Az adatelemek azonos mérete lehetővé teszi, hogy az adatokat szekvenciálisan és közvetett módon egyaránt elérjük. A fájlban tárolt adatelemek a felírás sorrendjében 0-tól kezdve egyesével számozódnak. A fájl feldolgozásánál a sorszám felhasználásával az állomány tetszőleges elemére pozícionálhatunk. A fájl méretét a benne található adatelemek száma adja.
A típus nélküli fájlok
A számítógépen tárolt állományok többsége nem tagolható szövegsorokra, és a bennük tárolt adatelemek mérete sem azonos. Az ilyen állományokat típus nélküli fájlként kezelhetjük. Ez nagy segítséget jelent ismeretlen vagy nem szabályos szerkezetű fájlok feldolgozásakor. Mivel az adatforgalom a fájl és a program között ellenőrzés nélkül megy végbe, gyors fájlkezelés valósítható meg. (var valtozonev: file)
A fájlkezelés lépései
Az állományok tartalmának eléréséhez az oprendszertől és a programnyelvtől függetlenül mindig ugyanazokat a főbb lépéseket kell végrehajtani: előkészületek, megnyitás, feldolgozás fájlműveletekkel, az állomány lezárása.
a) Előkészületek
A lemezen tárolt állományokat a fájlváltozóval azonosítjuk.
Deklarálása: var változónév : file of tipus;
A megfelelő típusú fájlváltozó létrehozása után, az AssignFile eljárás segítségével össze kell rendelni a fájlváltozót egy létező vagy új állomány nevével.
AssignFile(fájlváltozó, fájlnév elérési útja )
Ha az elérési utat nem adjuk meg, akkor a hivatkozás relatív lesz, tehát ott keresi majd a fájlt, ahol a program elhelyezkedik. („hordozható lesz” a program)
b) A fájlnyitás
A reset eljárás segítségével csak létező állomány nyitható meg. A nyitás után az EOF függvény true értéke jelzi, ha a fájl üres. A Reset az aktuális fájlpozíciót a fájl elejére állítja (a művelet már megnyitott állományon is elvégezhető).
A rewrite eljárás új állományt hoz létre, vagy a már meglévő fájlt újraírja, így annak teljes tartalma elvész. Az állomány elejére állítja az aktuális fájlpozíciót.
A fájlnyitó eljárások nem határozzák meg az adatok áramlásának irányát. A fájlnyitás előtt a System modul FileMode változójának történő értékadással beállíthatjuk, hogy a Reset eljárással megnyitott típusos –és típus nélküli fájlokhoz milyen műveletekkel lehet hozzáférni:
0 (csak olvasható), 1 (csak írható), 2 (írható és olvasható).
c) Típusos fájlok I/O műveletei
A megnyitott típusos fájlban az aktuális fájlpozíció a fájl elején helyezkedik el, és az első, 0. sorszámú adatelemre mutat.
A fájl utolsó elemét követően az Eof(fájlváltozó) true értéke jelzi az állomány végének elérését. A Seek(fájlváltozó, index) eljárás az aktuális fájlpozíciót a longint típusú index paraméterben megadott sorszámú elemre mozgatja.
Ha a fájl vége után pozícionálunk (az index nagyobb, mint a fájl adatelemeinek száma), akkor az Eof függvény true értéket ad vissza. Ilyen pozíció esetén az olvasás művelete „Read beyond end of file” hibát eredményez.
A FileSize(fájlváltozó) függvény integer típusú visszatérési értékben adja meg a fájlban tárolt adatelemek számát. Ha a fájl üres, az érték 0.
A FilePos(fájlváltozó) függvény a longint típusú aktuális fájlpozíció értékével tér vissza. Az aktuális fájlpozíció kijelöli azt az adatelemet, amelyet a következő művelettel elérünk.
Az állomány végének elérésekor a FileSize és a FilePos ugyanazt az értéket adja.
A Truncate(fájlváltozó) eljárás az aktuális fájlpozíciótól kezdve csonkolja az állományt.
d) A fájl lezárása
A CloseFile eljárás frissíti az állományt, így az utoljára végrehajtott műveletek eredménye is megjelenik az állományban.
Az állomány lezárása után is megmarad a kapcsolat a fájlnév és a fájlváltozó között, így ha a programban újra meg kell nyitni egy már lezárt állományt, akkor nincs szükség újabb AssignFile hívására.
A Delphi programból kilépve
Előnyei: könnyű és gyors adatkezelés, kis fájlméret a bináris tárolásnak köszönhetően.
Hátrányai: Ismerni kell a típusát, hogy kezelni tudjuk; ember számára olvashatatlan;
e) Az utolsó adatelem utánra való pozícionálás hozzáíráshoz
Seek(fájlváltozó, filesize(fájlváltozó));
f) Az állomány teljes tartalmának törlése
Seek(fájlváltozó, 0);
Truncate(fájlváltozó);
g) Egy adott adatelem törlése
Módszer: az utolsó elemmel felülírjuk a törlendő elemet. Hátránya, hogy a fájl rendezetlen lesz.
Módszer: a törlendőt felülírjuk az utána következővel, azt pedig az azután következővel. A végét csonkoljuk. Így a rendezettség megmarad.
Seek(f, filesize(f)-1);
Read(f, rec);
Seek(f, i);
Write(f, rec);
Seek(f, filesize(f)-1);
Truncate(f);
h) Létező fájl listázása
Reset(f);
For i:=1 to filesize(f) do begin
read(f, rec);
memo1.lines.add(rec);
end;