Objekty třídy FileSystemObject, Drive, Folder a File v Basicu

Doc. Dr. Vladimír Homola, Ph.D.

 

1. Úvod

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:

Z mnoha vlastností a metod zde popíšeme ty, které zjednodušují zpracování řetězce znaků ve smyslu úplného označení souborů.

 

2. Deklarace objektů

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.

 

3. Zpracování jmen souborů

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

 

4. Zpracování všech souborů adresáře

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í.

 

5. Zpracování všech podadresářů adresáře

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í.

 

6. Další metody objektu FileSystemObject

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