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 BONANZA, 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.BON","PROGRAM.BAK") then
   Writeln("Zßlo₧nφ kopie programu byla vytvo°ena")
End If
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")
End If
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")
End Sub
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")
End Sub
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: "+CStr(x/1024/1024))
Else
   Writeln("Mechanika A: nenφ p°ipravena")
End If
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
   Writeln("Zm∞na adresß°e prob∞hla v po°ßdku")
   Chdir(d)  'p°epneme se zp∞t do p∙vodnφho adresß°e
Else
   Writeln("Zadan² adresß° z°ejm∞ neexistuje !")
End If
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φ
End If
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