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