Objekty třídy FileSystemObject, Drive, Folder a File v Basicu
Doc. Dr. Vladimír Homola, Ph.D.
Prostředí Windows - jako prostředí především programátorské - nabízí neskutečnou řadu objektů ať už "visual" nebo "non-visual" zvláště v knihovnách DLL, OLB nebo OCX. Mnohé z nich je obtížné (a často téměř nebezpečné) využít, protože jsou dodávány při instalaci nejrůznějších programových komponent a samozřejmě bez dokumentace. Naopak mnohé z těch, které pochází z autorské dílny Microsoftu a tvoří vlastně podstatu MS Windows, jsou velmi dobře dokumentované (viz MSDN) a vynikajícím způsobem ulehčují a zpříjemňují práci programátora. Jsou přístupné když ne jinak, pak rozhodně přes API Windowsů.
Jednou z knihoven, která obsahuje objekty zjednodušující vytváření programů pro zpracování adresářů a souborů, je Microsoft Scripting Runtime (SCRRUN.DLL). Připojí se k projektu výběrem z hlavního menu Visual Basicu: Project / References / Microsoft Scripting Runtime. Tím získá programátor (kromě jiných) těmito objekty:
FileSystemObject s řadou metod pro zpracování jmen souborů, získávání adresářů a souborů apod. Je vrcholovým objektem pro správu souborů.
Drive reprezentuje konkrétní "disk" - to, čemu je v daném systému přiřazeno "písmeno s dvojtečkou".
Folder reprezentuje konkrétní adresář a zprostředkovává přístup k souborům a podadresářům v něm.
File reprezentuje konkrétní soubor s přístupem ke všem jeho vlastnostem a atributům.
Z mnoha vlastností a metod zde popíšeme ty, které zjednodušují zpracování řetězce znaků ve smyslu úplného označení souborů.
V programu deklaruje programátor potřebné objekty deklarací typu, např.
Dim FSO As New FileSystemObject Dim Disk As Drive Dim Adresar As Folder, Podadresar as Folder Dim Soubor As File
Stejné označení objektů bude předpokládáno i v následujícím textu.
Nechť je aktuálním adresářem na disku D: adresář D:\BASIC\ZKUSEBNI\POKUSY. Nechť je proměnná TXT deklarována a obsazena takto:
Dim TXT As String TXT = "d:pokusy\alfa beta.txt"
(upozorňujeme na mezeru mezi alfa a beta a na zápis malými písmeny). Aktuální adresář existuje a je skutečně nazván velkými písmeny, podadresář pokusy v adresáři POKUSY neexistuje. Metody objektu FSO lze pak využít ke získání částí označení souboru v TXT podle následující tabulky:
Volání metody Předaný výsledek Poznámka FSO.GetAbsolutePathName(TXT) D:\BASIC\ZKUSEBNI\POKUSY\pokusy\alfa beta.txt FSO.GetBaseName(TXT) alfa beta viz mezera a velikost písmen FSO.GetDriveName(TXT) d: FSO.GetExtensionName(TXT) txt FSO.GetFileName(TXT) alfa beta.txt viz mezera a velikost písmen FSO.GetParentFolderName(TXT) d:pokusy FSO.GetTempName() rad673AD.tmp náhodně podle syst.času
Nechť dále existuje soubor D:\BASIC\ZKUSEBNI\POKUSY\Alfa beta Gama.txt (opět viz velikost písmen a mezery). Nechť je obsazen pointer na objekt Soubor typu File následovně:
Set Soubor = FSO.GetFile ("D:\BASIC\ZKUSEBNI\POKUSY\Alfa beta Gama.txt")
Vlastnosti objektu Soubor pak obsahují textové řetězce podle následující tabulky:
Vlastnost Obsah Poznámka Soubor.Drive d: Soubor.Name Alfa beta Gama.txt Soubor.Path D:\BASIC\ZKUSEBNI\POKUSY\Alfa beta Gama.txt viz mezery a velikost písmen Soubor.ParentFolder D:\BASIC\ZKUSEBNI\POKUSY bez koncového \ Soubor.ShortName ALFABE~1.TXT Soubor.ShortPath D:\BASIC\ZKUSEBNI\POKUSY\ALFABE~1.TXT Soubor.DateCreated 9.10.2001 05:11:23 datum a čas vytvoření Soubor.Size 2 876 soubor měl 2 876 bytů Soubor.Type Textový dokument slovně, česky ve Windows CZ
Zpracování všech souborů nějakého adresáře (třeba BASIC) zajistí např. následující sekvence příkazů:
Set Adresar = FSO.GetFolder ("D:\BASIC") For Each Soubor In Adresar.Files ' Zpracování souboru Soubor Next Soubor
Soubory adresáře totiž tvoří kolekci Files objektů typu File. Počet souborů v adresáři Adresar je proto dostupný pomocí
Adresar.Files.Count
a je tedy možno pro zpracování souborů použít i indexování.
Zpracování všech podadresářů nějakého adresáře (třeba BASIC) zajistí např. následující sekvence příkazů:
Set Adresar = FSO.GetFolder ("D:\BASIC") For Each Podadresar In Adresar.SubFolders ' Zpracování podadresare Podadresar Next Podadresar
Podadresáře adresáře totiž tvoří kolekci Folders objektů typu Folder. Počet podadresářů v adresáři Adresar je proto dostupný pomocí
Adresar.SubFolders.Count
a je tedy možno pro zpracování podadresářů použít i indexování.
Objekty typu FileSystemObject, Folder a File obsahují řadu metod, které často pracují rychleji než ekvivalentní příkazy Basicu (maximální rychlost je rychlost API). Některé metody popisuje následující tabulka:
Metoda Význam Poznámka FSO.GetFolder dodá konkrétní adresář (typ Folder) viz odst. 4. a 5. FSO.GetFile dodá konkrétní soubor (typ File) FSO.CopyFile zkopíruje konkrétní soubor FSO.CreateFolder vytvoří nový adresář FSO.CopyFolder zkopíruje celý adresář včetně obsahu FSO.DeleteFile zruší soubor na disku viz Kill v Basicu FSO.DeleteFolder zruší celý adresář včetně jeho obsahu
Rev. 04 / 2002