Gli
oggetti FileSystemObject, Drive, File, Folder e gli insiemi
Files e Folders |
Cominciamo
ad analizzare brevemente l'oggetto FileSystemObject: esso
consente di accedere alle informazioni relative ai file specificati
(data, dimensioni, ultima modifica e così via) e ad
operare alcune utili modifiche nel loro percorso (li può
spostare, copiare, cancellare, aprire e così via).
La sintassi è molto semplice:
Scripting.FileSystemObject |
E
per inizializzare l'oggetto per poi poterne richiamare metodi
e proprietà a seconda delle necessità, sarà
necessario includere la seguente linea di codice:
Set
FSO = CreateObject("Scripting.FileSystemObject") |
I
tanti metodi supportate dall'oggetto permettono quindi di
accedere realmente a tutti i dati dei file. Analizziamone
il primo: GetFile. Attraverso tale metodo si memorizza in
un secondo oggetto chiamato File appartenente all'insieme
Files (ossia all'insieme di tutti gli oggetti File
di una cartella) tutti i dati del file in questione. Proviamo
a creare questo oggetto File:
Set
File = FSO.GetFile("C:\Dati\nomefile.txt") |
Adesso
tutte le informazioni di "C:\Dati\nomefile.txt"
sono contenute in File e non c'è altro da fare che
richiamarle in modo molto semplice, sfruttando tutte le proprietà
supportate dall'oggetto File:
With
File
MsgBox "Nome: " & .Name & vbCrLf &
_
"Nome breve: " & .ShortName & vbCrLf
& _
"Dimensioni: " & .Size & vbCrLf &
_
"Tipo: " & .Type & vbCrLf & _
"Proprietà: " & .Attributes &
vbCrLf & _
"Drive: " & .Drive & vbCrLf & _
"Percorso: " & .Path & vbCrLf &
_
"Percorso breve: " & .ShortPath & vbCrLf
& _
"Cartella: " & .ParentFolder & vbCrLf
& _
"Data creazione: " & .DateCreated &
vbCrLf & _
"Ultima modifica: " & .DateLastModified
& vbCrLf & _
"Ultimo accesso: " & .DateLastAccessed
End With |
Il
risultato sarà simile a quello in figura:
Un
altro metodo è GetExtensionName che può
sostituire la proprietà Type dell'oggetto File.
Se ad esempio si volesse conoscere l'estensione del file raggiungibile
al percorso "C:\Dati\1dat2.txt" che chiaramente
è un file di testo si dovrebbe inserire in una qualsiasi
routine questo blocco:
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.GetExtensionName("C:\Dati\1dat2.txt") |
Il
risultato è mostrato dalla figura sotto:
Sono
interessanti anche i metodi FileExists, FolderExists e DriveExists
che con un semplice passaggio determinano l'esistenza di un
file, di una cartella sull'hard disk o di un'unità
qualsiasi (o su un qualsiasi altro supporto).
Nel caso di FileExists:
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.FileExists("C:\Dati\1dat2.txt")
|
:Naturalmente
nel caso in cui il file esista la casella di messaggio riporterà
"Vero", in caso contrario "Falso". Per
quanto riguarda invece FolderExists:
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.folderexists("C:\Dati\") |
Per
DriveExists:
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.DriveExists("C:\Dati\") |
I
metodi GetFileName, GetParentFolderName e GetBaseName
che comunque sono già incorporati come proprietà
nell'oggetto File, come visto nel primo esempio, servono invece
a recuperare il nome di un determinato file o della cartella
di appartenenza oppure dell'ultimo elemento di un percorso
di un file o di una cartella, escluso di estensione:
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.GetFileName("C:\Dati\1dat2.txt")
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.GetParentFolderName("C:\Dati\")
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.GetParentBaseName("C:\Dati\1dat2.txt")
|
E'
poi importante il metodo GetTempName che fornisce il
nome di un file temporaneo che è possibile utilizzare
nel caso si voglia creare un file:
Ecco alcuni esempi di nomi di file temporanei che genera il
metodo GetTempName:
Di
seguito troviamo il metodo GetFolder che in maniera
simile GetFile e GetDrive memorizzano in un oggetto Folder
i dati relativi ad un determinato percorso.
Se infatti inizializziamo l'oggetto Folder e ne estraiamo
tutte le proprietà, come nell'esempio riportato qui
sotto:
Set
FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\Dati\")
With Folder
MsgBox "Nome: " & .Name & vbCrLf &
_
"Nome breve: " & .ShortName & vbCrLf
& _
"Data di creazione: " & .DateCreated &
vbCrLf & _
"Proprietà: " & .Attributes &
vbCrLf & _
"Ultimo accesso: " & .DateLastAccessed &
vbCrLf & _
"Ultima modifica: " & .DateLastModified
& vbCrLf & _
"Unità: " & .Drive & vbCrLf &
_
"E' la cartella principale: " & .IsRootFolder
& vbCrLf & _
"Percorso: " & .ParentFolder & vbCrLf
& _
"Percorso breve: " & .ShortPath & vbCrLf
& _
"Dimensioni: " & .Size & vbCrLf &
_
"Tipo: " & .Type & vbCrLf
End With |
otteniamo
un risultato del tipo:
Andando
avanti troviamo il metodo GetSpecialFolder che recupera
i dati di una cartella riservata del sistema e li memorizza
all'interno di un oggetto Folder.
La sintassi del metodo è:
FSO.GetSpecialFolder(tipocartella) |
dove
tipocartella può essere uno dei seguenti valori:
WindowsFolder: Cartella Windows che contiene i file installati
dal sistema operativo Windows
SystemFolder: Cartella System che contiene le librerie, i
tipi di carattere e i driver di periferica
TemporaryFolder: Cartella Temp che viene utilizzata per memorizzare
i file temporanei. Il percorso si trova nella variabile di
ambiente TMP.
L'esempio sotto riporta un risultato simile a quello che darebbe
il metodo GetFolder, se lo si applicasse ad una cartella di
tipo riservato:
Set
FSO = CreateObject("Scripting.FileSystemObject")
Set SpecialFolder = FSO.GetSpecialFolder(WindowsFolder)
With SpecialFolder
MsgBox "Nome: " & .Name & vbCrLf &
_
"Nome breve: " & .ShortName & vbCrLf
& _
"Data di creazione: " & .DateCreated &
vbCrLf & _
"Proprietà: " & .Attributes &
vbCrLf & _
"Ultimo accesso: " & .DateLastAccessed &
vbCrLf & _
"Ultima modifica: " & .DateLastModified
& vbCrLf & _
"Unità: " & .Drive & vbCrLf &
_
"E' la cartella principale: " & .IsRootFolder
& vbCrLf & _
"Percorso: " & .ParentFolder & vbCrLf
& _
"Percorso breve: " & .ShortPath & vbCrLf
& _
"Dimensioni: " & .Size & vbCrLf &
_
"Tipo: " & .Type & vbCrLf
End With |
Esistono
poi una serie di metodi che risultano alle proprietà
dell'oggetto Drive. Vediamo prima queste ultime, introducendo
Drive come quell'oggetto che consente di accedere alle proprietà
di un determinato disco o di una determinata un'unità
condivisa di rete.
Come già fatto per l'oggetto File visualizziamo una
finestra di messaggio utilizzando tutte le proprietà
di cui Drive dispone:
Set
FSO
= CreateObject("Scripting.FileSystemObject")
Set Drive = FSO.GetDrive("A:")
With Drive
MsgBox "Spazio disponibile in byte: " &
.AvailableSpace & vbCrLf & _
"Spazio disponibile in byte: " & .FreeSpace
& vbCrLf & _
"Lettera identificatrice del drive: " &
.DriveLetter & vbCrLf & _
"Tipo di unità : " & .DriveType &
vbCrLf & _
"File system (FAT, NTFS, CDFS): " & .FileSystem
& vbCrLf & _
"Unità attiva: " & .IsReady &
vbCrLf & _
"Cartella principale dell'unità: " &
.RootFolder & vbCrLf & _
"Numero di serie decimale del volume: " &
.SerialNumber & vbCrLf & _
"Nome di condivisione dell'unità: " &
.ShareName & vbCrLf & _
"Spazio totale in byte: " & .TotalSize &
vbCrLf & _
"Volume dell'unità specificata: " &
.VolumeName
End With |
Avviando
l'applicazione si avrà un risultato come quello mostrato
qui sotto:
Notare
che AvailableSpace e FreeSpace restituiscono
lo stesso risultato, anche se trattando con dimensioni più
grosse ci potrebbero essere piccole differenze.
Arriviamo
quindi ai metodi di gestione dei file e delle cartelle dell'oggetto
FileSystemObject. Per unire un nome ad un percorso esistente
si utilizza il metodo BuildPath. Se ad esempio si conosce
il percorso di una cartella e si lascia all'utente la scelta
di un file al suo interno, si può creare il percorso
completo del file unendo percorso della cartella e nome del
file:
Set
FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.BuildPath("C:\Dati", "1dat2.txt") |
Per
copiare un file o una cartella da un percorso iniziale ad
uno di destinazione si usa invece i metodi CopyFile
e CopyFolder nei quali si indicano come parametri il
percorso di origine, quello di destinazione e True nel caso
si voglia sovrascrivere il file o la cartella se questi esistono
già e False nel caso contrario.
Ad esempio:
Set
FSO
= CreateObject("Scripting.FileSystemObject")
FSO.CopyFile "C:\Dati\1dat2.txt", "C:\1dat2.txt",
False
Set
FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder "C:\Dati\ ", "C:\Altracartella\Dati\",
False
|
Il
metodo CreateFolder invece crea dal nulla una nuova
cartella nel percorso specificato:
Set
FSO = CreateObject("Scripting.FileSystemObject")
FSO.CreateFolder "C:\Dati\DatiDati" |
Il
metodo CreateTextFile è utile per creare un
nuovo file di testo. Per far ciò si devono indicare
il percorso del file da creare, True se si desidera sovrascrivere
un file eventualmente già esistente, False in caso
contrario e ancora True se file viene creato come file Unicode
e False se viene creato come ASCII. Ad esempio:
Set
FSO = CreateObject("Scripting.FileSystemObject")
FSO.CreateTextFile "C:\Dati\2dat2.txt", False,
False |
I
metodi DeleteFile e DeleteFolder servono a cancellare
un file o una cartella.
Ad esempio:
Set
FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile "C:\Dati\2dat2.txt"
Set
FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFolder "C:\Dati\"
|
I
metodi MoveFile e MoveFolder spostano un file
o una cartella da un percorso all'altro. Si devono qundi indicare
il percorso di origine e quello di destinazione:
Set
FSO = CreateObject("Scripting.FileSystemObject")
FSO.MoveFile "C:\Dati\1dat2.txt", "C:\Dati\DatiDati\1dat2.txt"
Set
FSO = CreateObject("Scripting.FileSystemObject")
FSO.MoveFolder "C:\Dati\", "C:\Itad"
|
Il
metodo OpenTextFile apre un file di testo specificato
per eseguirne la lettura. E' necessario indicare il percorso
del file, la modalità di lettura (ForReading che apre
il file in sola lettura per cui non è possibile scriverci,
ForAppending che apre il file e vi scrive fino alla fine),
True se si vuole creare il file se questo non esiste, False
nel caso contrario ed uno dei seguenti valori: TristateUseDefault
che apre il file utilizzando l'impostazione predefinita di
sistema, TristateTrue che apre il file in formato Unicode
e TristateFalse che apre il file in formato ASCII.
Ad esempio:
Const
ForReading = 1, ForWriting = 2, ForAppending = 3
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.OpenTextFile ("C:\Dati\1dat2.txt", ForAppending,
TristateFalse) |
Le
ultime parole vanno spese per il rapporto che intercorre tra
gli insiemi Folders e Files.
Negli esempi precedenti sono stati omesse alcune proprietà
che fanno uso proprio di questi rapporti. Consideriamo dapprima
la proprietà Files dell'oggetto Folder.
Attraverso tale proprietà viene restituito un insieme
Files composto da tutti gli oggetti File contenuti nella cartella
specificata, compresi i file nascosti e di sistema.
In questo modo si può fare uso delle proprietà
dell'oggetto File per determinare per ciascuno le proprietà.
Ad esempio, vogliamo determinare le proprietà di ciascun
file contenuto nella cartella "C:\Dati" ossia dei
file 1dat2.txt e 2dat2.txt:
Set
FSO
= CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\Dati\")
Set Files = Folder.Files
For Each File In
Files
With File
MsgBox "Nome: " & .Name & vbCrLf &
_
"Nome breve: " & .ShortName & vbCrLf
& _
"Dimensioni: " & .Size & vbCrLf &
_
"Tipo: " & .Type & vbCrLf & _
"Proprietà: " & .Attributes &
vbCrLf & _
"Drive: " & .Drive & vbCrLf & _
"Percorso: " & .Path & vbCrLf &
_
"Percorso breve: " & .ShortPath & vbCrLf
& _
"Cartella: " & .ParentFolder & vbCrLf
& _
"Data creazione: " & .DateCreated &
vbCrLf & _
"Ultima modifica: " & .DateLastModified
& vbCrLf & _
"Ultimo accesso: " & .DateLastAccessed
End With
Next File |
Come
risultato si avranno le proprietà di entrambi i file
in due finestre di messaggio:
|