Lekce 1.21
Knihovna pro prßci se soubory


p°edchozφ lekce (1.20) obsah kurzu nßsledujφcφ lekce (1.22)

Pokud jste ji₧ zkuÜen² programßtor v jazyce KLONDAIK, mohou se vßm hodit funkce pro kopφrovßnφ soubor∙ a prßci s adresß°em na disku. Musφte si vÜak dßvat pozor, abyste nezruÜili d∙le₧itß data a soubory.

JmΘna soubor∙ a adresß°∙ se v nßsledujφcφch funkcφch p°edßvajφ ve tvaru °et∞zce. Pokud se soubor nachßzφ ve stejnΘm adresß°i jako program, nenφ nutnΘ uvßd∞t k n∞mu cestu (jmΘno adresß°e). Stejn∞ tak nemusφte uvßd∞t oznaΦenφ disku, pokud se jednß o aktußlnφ disk.

Asi nejΦast∞ji pou₧φvanou funkcφ bude kopφrovßnφ soubor∙. K tomu nßm poslou₧φ funkce FileCopy, ve kterΘ musφte uvΘst jako parametr jmΘno zdrojovΘho souboru a jmΘno cφlovΘho souboru. Funkce p°itom vracφ logickou hodnotu o ·sp∞Ünosti kopφrovßnφ:


If FileCopy('PROGRAM.KLN','PROGRAM.BAK') then
   Writeln('Zßlo₧nφ kopie programu byla vytvo°ena');
Soubor se nemusφ zkopφrovat v mnoha r∙zn²ch p°φpadech. Nap°φklad soubor pro kopφrovßnφ nemusφ existovat, na disku je mßlo mφsta a podobn∞. Seznßmφme se proto s funkcemi, kterΘ nßm zajistφ zjiÜt∞nφ informacφ o disku, volnΘm prostoru a podobn∞. Nejprve bude vhodnΘ zjistit, zda soubor skuteΦn∞ existuje. K tomu nßm poslou₧φ funkce FileExists:

If FileExists('C:\CONFIG.SYS') then
   Writeln('Soubor opravdu existuje');
DalÜφm krokem by mohlo b²t zjiÜt∞nφ velikosti souboru, aby jsme mohli nßsledn∞ zjistit, zda se nßm kopie souboru na disk vejde. K tomu se pou₧ije funkce FileSize, kterß vracφ velikost souboru v bajtech. Zßporn² v²sledek signalizuje neexistenci zadanΘho souboru:

Write  ('Velikost:');
Write  (FileSize('C:\AUTOEXEC.BAT')/1024);
Writeln(' Kb');
Soubor m∙₧eme krom∞ kopφrovßnφ takΘ p°ejmenovat, p°φpadn∞ zruÜit. Zde ale opatrn∞. P°ejmenovßnφ souboru provßdφ funkce FileRename, ve kterΘ se musφ jako parametry uvΘst jmΘno p∙vodnφho souboru a jmΘno novΘho souboru. Funkce vracφ logickou hodnotu indikujφcφ ·sp∞Ünost operace:

If FileRename('XXX.XXX','YYY.YYY') then
   Writeln('P°ejmenovßnφ souboru prob∞hlo v po°ßdku');
Soubor lze samoz°ejm∞ takΘ vymazat funkcφ FileDelete, ve kterΘ se uvede jmΘno souboru pro zruÜenφ. Funkce vracφ op∞t logickou hodnotu udßvajφcφ ·sp∞Ünost v²mazu souboru:

If FileDelete('YYY.YYY') then
   Writeln('Soubor YYY.YYY byl zruÜen');
DalÜφ skupina procedur a funkcφ se zab²vß p°φmo diskem a disketami, kdy je mo₧nΘ zjistit jejich velikost, volnΘ mφsto, ale nap°φklad takΘ vytvß°et a ruÜit adresß°e. Pro zjiÜt∞nφ velikosti (kapacity) disku nebo diskety se pou₧ije funkce DiskSize. Jako parametr se p°itom uvßdφ Φφslo disku od A (A=1, B=2, C=3, ..). Funkce vracφ velikost v bajtech. Pokud je vrßcena zßpornß hodnota, je tφm indikovßna bu∩ neexistence za°φzenφ, p°φpadn∞ nep°ipravenost disketovΘ mechaniky (nenφ zalo₧ena disketa):

x := DiskSize(1);
If x < 0 then
   Writeln('Velikost disku A: '+IntToStr(x/1024/1024))
else
   Writeln('mechanika A: nenφ p°ipravena');
Obdobn²m zp∙sobem je mo₧nΘ zjistit volnou kapacitu disku funkcφ DiskFree. Funkce se dß op∞t pou₧φt pro indikaci nep°ipravenosti za°φzenφ. V nßsledujφcφm p°φklad∞ se vÜak zjiÜ¥uje volnß kapacita disku C a tak se p°edpoklßdß, ₧e opravdu existuje.

Write  ('Velikost disku C:');
Write  (DiskSize(3)/1024/1024);
Writeln(' Mb');
Write  ('Volnß kapacita C:');
Write  (DiskFree(3)/1024/1024);
Writeln(' Mb');
DalÜφ funkce se ji₧ zab²vajφ p°φmo adresß°i. Funkce GetDir zjiÜ¥uje jmΘno aktußlnφho adresß°e. Parametr zadßvß op∞t Φφslo disku od A. Nulov² parametr p°itom p°edpoklßdß aktußlnφ diskovou jednotku. Zm∞nu pracovnφho adresß°e provedete funkcφ ChDir, ve kterΘ uvedete jmΘno adresß°e, do kterΘho se chcete p°epnout.

d := GetDir(0);
If ChDir('\pokus') then
begin
   Writeln('Zm∞na adresß°e prob∞hla v po°ßdku');
   Chdir(d);       {p°epneme se zp∞t do p∙vodnφho adresß°e}
end else
begin
   Writeln('Zadan² adresß° z°ejm∞ neexistuje !');
end;
Pokud pot°ebujete zalo₧it nov² adresß°, m∙₧ete pou₧φt funkci MkDir, kde uvedete jako parametr jmΘno adresß°e. Zadan² adresß° nesmφ p°itom existovat, nebo to nesmφ b²t jmΘno souboru. V p°φpad∞ chyby vracφ funkce nenulovou hodnotu. Adresß° m∙₧ete naopak zruÜit funkcφ RmDir, kde uvedete op∞t jako parametr jmΘno adresß°e pro zruÜenφ. Adresß° musφ b²t p°itom prßzdn² ! V p°φpad∞ ·sp∞Ünosti vracφ funkce nulovou hodnotu.

If MkDir('pokus') = 0 then {pokud je adresß° ·sp∞Ün∞ zalo₧en}
   RmDir('pokus');         {tak ho op∞t zruÜφme, a¥ nezavazφ}
Jak ji₧ bylo uvedeno, musφte b²t p°i prßci s funkcemi pro obsluhu soubor∙ a adresß°∙ zvlßÜ¥ opatrnφ, proto₧e p°φpadnß chyba m∙₧e mφt nedozφrnΘ nßsledky !
p°edchozφ lekce (1.20) obsah kurzu nßsledujφcφ lekce (1.22)

OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz