You are on page 1of 3

Excel programozás, 5.

rész - FileSystemObject Object Model


05. FileSystemObject Object Model

Bár az Excel maga rendelkezik olyan beépített osztállyal (FileSystem), amellyel fájl, könyvtár vagy meghajtó művelteket
hajthatunk végre, azonban ez gyakran igen kevésnek bizonyulhat, ezért nem ezt fogjuk használni. Rendelkezésünkre áll
ugyanis egy kifejezetten fájlkezelésre használatos objektummodell, amelynek segítségével objektumorientált módon
játszhatunk fájljainkkal, könyvtárainkkal, meghajtóinkkal. A továbbiakban ezzel az objektummodellel fogunk
megismerkedni. 
Objektummodellünket hivatalosan FileSystemObject Object Model-nek hívják.

FileSystemObject objektum

Ahhoz, hogy létrehozzunk a FileSystemObject objektumot, a CreateObject függvényt hívjuk segítségül:


Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
 End Sub
Ezzel lehetőségünk nyílik arra, hogy az fso objektumváltozó segítségével elérhessük az objektum metódusait és
tulajdonságait. Az igazat megvallva bárminemű művelet végrehajtásához szükségünk lesz erre az objektumra. Ez azt
jelenti, hogy minden példaprogramunk innentől kezdve ezzel fog kezdődni, ugyanis ezzel az objektummal fogjuk tudni
elérni a modell többi objektumot/objektumhalmazt is.
Most pedig nézzük meg mit is tudunk csinálni ezzel az objektummal.

Fájlok, könyvtárak, meghajtók létezésének vizsgálata


 Az objektum rendkívül hasznos metódusai közé tartoznak azok, amelyekkel képesek vagyunk fájlok, könyvtárak és
meghajtok létezésének a vizsgálatára. Gyakran kerülhetünk ugyanis olyan probléma elé, ahol egy könyvtár, vagy fájl
létezésének vizsgálata a makró biztonságos működésének előfeltétele. Nem nyithatunk ki egy fájlt akkor, ha az nem
biztos, hogy ott van, vagy nem hozhatunk létre egy könyvárat, ha véletlenül azt már valaki létrehozta helyettünk, stb,
stb...számos példát lehet sorolni. De miként is tudjuk ezeket a létezéseket megvizsgálni? Egy fájl létezésének vizsgálatát
a FileExists metódussal vizsgálhatjuk meg. A metódusnak egyetlen paramétere van, amellyel a vizsgálandó fájl nevét
(útvonallal együtt) adjuk át.

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("C:\Documents and Settings\MakroMester.txt") = True Then
MsgBox "A fájl létezik az adott könyvtárba"
Else
MsgBox "A fájl nem létezik az adott könyvtárba"
End If
End Sub

A metódus igaz vagy hamis értéket ad vissza, attól függően, hogy fájl létezik e, vagy sem. Ennek analógiájára
vizsgálhatjuk meg egy könyvtár létezését is a FolderExists metódussal.

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists("c:\Documents and Settings") = True Then
MsgBox "A könyvtár létezik az adott könyvtárba"
Else
MsgBox "A könyvtár nem létezik az adott könyvtárba"
End If
End Sub

Ezek után már egy meghajtó létezésének vizsgálatától sem kell megijednünk, amelyet DriveExists metódussal hajthatunk
végre.
2. Fájlnévvel és útvonallal kapcsolatos információk megszerzése
Bár nem igényel túl sok programozó tudást, a fájlnév kinyerése egy útvonalból, vagy egy fájl kiterjesztésének
megszerzése, mégis bosszantó lehet ezeket az egyszerű kis String kezelő rutinokat megírni, ahelyett, hogy a problémánk
érdemi részével tudnánk foglalkozni.
A objektum ebben is a segítségünkre siet, és számos metódussal segít minket. Nézzük is meg ezeket.
 A GetFileName metódus segítségével egy útvonalban lévő fájl nevét kapjuk eredményül. Paraméterként mindössze az
útvonalat kell megadnunk, amely lehet abszolút vagy relatív.

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox fso.GetFileName("c:\Documents and Settings\Makro.txt")
End Sub

Ha egy fájl kiterjesztésére vagyunk kíváncsiak, akkor a GetExtensionName metódust használjuk.


MsgBox fso.GetExtensionName("c:\Documents and Settings\Makro.txt")

Amennyiben egy adott útvonalból számunkra csak a meghajtó neve érdekel, akkor használjuk a GetDriveName
metódust.
MsgBox fso.GetDriveName("c:\Documents and Settings\Makro.txt")

De mi van akkor ha nekünk, az útvonalból csak a fájl nevére van szükségünk a kiterjesztés nélkül. Ekkor sem kell
csüggednünk, és a teljes fájlnév lekérdezést követően további String kezelő függvényekkel bajlódnunk, hiszen
rendelkezésünkre áll a GetBaseName metódus, amely pontosan ezt a feladatot, hajtja végre.
MsgBox fso.GetBaseName("c:\Documents and Settings\Makro.txt")

3. Alapvető fájlműveltek végrehajtása


A FileSystemObject objektummal olyan alapvető fájlművelteket is végrehajthatunk, mint a fájlok másolása, mozgatása
egyik helyről egy másikra, vagy a fájlok törlése.
Fájlok másolására a az objektum CopyFile metódusa alkalmas, amely nemcsak egyetlen fájl másolására, hanem több fájl
egyidejű másolására is alkalmas. Ezt, a metódus azzal a nagy előnyével valósítja meg, hogy használhatjuk az ismert joker
karaktereket, tehát ??? vagy ?*?.
A metódus két kötelezően magadandó, és egy opcionális paraméterrel rendelkezik. A két kötelezővel a forrás
(másolandó) fájlt, vagy fájlokat adjuk meg, míg a másodikkal a célkönyvtárat, ahova a fájt vagy fájlokat másolni
szeretnénk. A harmadik paraméter egy Boolean típusú paraméter, amelynek értékét igazra állítva a célhelyen talált
azonos nevű fájlokat automatikusan felül írja, a forrásfájlokkal. Fontos, hogy e harmadik paraméter alapértéke False.
Nézzük is néhány példát a másolásra.
Egy fájl másolása szükség esetén felülírással:

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "c:\Documents and Settings\Makro.txt", "c:\Documents and Settings\Macros\"
End Sub

A fájlok mozgatását az objektum MoveFile metódusával hajtattuk végre. Hasonlóan a FileCopy metódushoz, itt is két
kötelező paramétert kell átadni. Az egyik a forrás fájl vagy fájlok, illetve a célmappa. Ennél a metódusnál nincs több
paraméter. Természetesen itt használhatjuk a joker karaktereket.

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile "c:\*.txt", "c:\Documents and Settings\"
End Sub

A fájlkezelés fontos eleme a fájlok törlése, amelynek végrehajtása a DeleteFile metódussal történik. Ennél a metódusnál
is megengedett, hogy egyszerre több fájl töröljünk a joker karakterek alkalmazásával. A metódus egyik paraméterével a
törlendő fájl(ok) útvonalát kell átadnunk, a másik opcionális paraméterrel pedig lehetőségünk van arra, hogy akkor is ki
tudjuk törölni a fájlokat, ha azoknak csak olvashatóra van állítva az attributruma. Ez utóbbit, a paraméter igazra
állításával oldhatjuk, meg. Az alapbeállítás egyébként False.

Sub FileKezeles()
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile "c:\Documents and Settings\Macros\Makro.txt"
End Sub

4. Alapvető könyvtárműveltek végrehajtása


Alapvető könyvtárművelet közé sorolhatjuk a következőket:

Könyvtár létrehozása
Könyvtár másolása (A benne lévő könyvtárakkal és fájlokkal együtt)
Könyvtárak mozgatását
Könyvtárak törlése

Haladunk akkor ebben a sorrendben és nézzük meg ezek megvalósulását az objektum segítségével.

Könyvtárat a CreateFolder metódussal hozhatunk létre, amelynek egyetlen paraméterével a létrehozandó könyvtár
nevét kell megadnunk.

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder "c:\Documents and Settings\Új könytár"
End Sub

Könyvtárat a CopyFolder metódussal tudunk másolni, amely teljes mértékben hasonlít CopyFile metódushoz. Ugyan
azokkal a paraméterekkel rendelkezik, ugyanúgy használhatunk joker karaktereket, azzal a különbséggel, hogy itt nem
fájl neveket, hanem könyvtár neveket kell megadnunk.
Egy könyvtár másolása:

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder "C:\Documents and Settings\Új könytár", "C:\"
End Sub

Könyvtárak mozgatására szerintem már mindenki kitalálta a MoveFolder nevű metódus alkalmazandó, teljesen analóg
módon, mint a MoveFile, azzal a különbséggel, hogy itt könyvtárakra hivatkozva kell a paramétereket átadnunk. Ne
feledjük, itt is alkalmazhatunk joker karaktereket.

Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFolder "C:\Documents and Settings\Makro2", "C:\"
End Sub

A végére maradt, hogy az eddigi példák során kreált példakönyvtárakat törölni. Erre a DeleteFolder metódus való. Mivel
az is analóg módon történik, mint a fájlok törlése esetében, ezért itt már csak egy kis minta programot szolgáltatok,
amely kitörli az összes "Makro"-val kezdődö könyvárat a Documents and Settings-ből.
Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder "C:\Documents and Settings\Makro*"
End Sub

You might also like