CreateObject e FileSystemObject. - dal 04/09/04 pagina vista: volte

Cercando una strada per spiegare il CreateObject con molta semplicità e pochissima tecnica, nasce comunque la necessità di accennare a grandi linee una premessa sulle Modalità di creazione di Oggetti in componenti Visual Basic.

Quando nasce la necessità di "utilizzare" "Oggetti" esterni alla nostra applicazione, il Visual Basic ci mette a disposizione degli strumenti per "connettersi" a questi "Oggetti". L'argomento "Connessione" può sfruttare canali diversi per "raggiungere l'"Oggetto" richiesto (gli OLE, i DDE, ecc.) e "sfruttarlo". Ci possiamo ad esempio "connettere" ad un database Access (.mdb) dal quale prelevare o consultare dati ivi contenuti. Conosciamo, grazie al Web, gli HyperLinks, che ci concedono di aprire file, conosciamo l'utilizzo della libreria Shell che ci consente di accedere ad altri Applicativvi presenti sul computer. Questi brevi accenni ci servono per differenziare un'altro modo di "accedere" a determinate classi di Oggetti presenti sul computer, che è il CreateObject, che ci consente di dialogare, usare, modificare, sfruttare tutti gli Oggetti che fanno parte del FileSystem, quali unità hard-disk, files, cartelle e sottocartelle.

Con la Funzione CreateObject possiamo creare "collegamenti" (cioè di interreagire) con oggetti di automazione tramite  interfacce di automazione. CreateObject crea e restituisce un riferimento ad un oggetto ActiveX . Per creare un oggetto di automazione, è necessario assegnare l'oggetto restituito dalla funzione CreateObject a una variabile oggetto. In altre parole "CreateObject" sfrutta i servizi messi a disposizione dal Sistema Operativo (Windows), servizi forniti dal modello basato su componenti COM (Component Object Model). Esiste anche un'altra funzione che consente la creazione di oggetti con interfacce di automazione, ed è la Funzione GetObject, di cui non parleremo in questo articolo per non complicare troppo l'articolo.

In pratica CreateObject, tramite l'utilizzo dell'"Oggetto ActiveX" FileSystemObject ci consente di accedere agli "oggetti" che fanno parte del FileSystem e di maniporarli attraverso l'impiego di Metodi posseduti dall'"oggetto" FileSystemObject".

Il FileSystemObject, che è una Libreria VBScript, possiede delle "proprietà" e dei "Metodi", metodi che ci consentono determinate azioni, come poter aprire ad un file, oppure eliminare un file, o copiarlo, o identificare e accedere alle Unità di un computer, e altre ancora. Vi riporto di seguito l'elenco completo dei metodi del FileSystemObject, anticipando che potrete trovarli tutti nella guida in linea dall'Editor di visual basic di Excel, dove trovate esempi di come poterli usare:

Metodo BuildPath
Metodo CopyFile
Metodo CopyFolder
Metodo CreateFolder
Metodo CreateTextFile
Metodo DeleteFile
Metodo DeleteFolder
Metodo DriveExists
Metodo FileExists
Metodo FolderExists
Metodo GetAbsolutePath
Metodo GetBaseName
Metodo GetDrive
Metodo GetDriveName
Metodo GetExtensionName
Metodo GetFile
Metodo GetFileName
Metodo GetFolder
Metodo GetParentFolderName
Metodo GetSpecialFolder
Metodo GetTempName
Metodo MoveFile
Metodo MoveFolder
Metodo OpenTextFile

Quando cercate spiegazioni su uno dei Metodi su elencati, può capitare di non capire come usare le istruzioni per sfruttare il metodo scelto (in effetti la guida in linea a questo proposito, è un pò avara di spiegazioni e pure di difficile ricerca). Vediamo un esempio che spieghi:

Supponiamo di cercare informazioni sul come poter eliminare un file dal nostro computer, e di cercare quindi il Metodo DeleteFile (metodo sopportato dall'oggetto FileSystemObject); ci troveremo a lottare contro i mulini a vento: se noi digitiamo in "cerca" della guida, la parola DeleteFile oppure Metodo DeleteFile, non otterremo ciò che cerchiamo, e neppure se digitiamo CreateObject o Funzione CreateObject, nè tantomeno FileSystemObject. Forse sono io poco capace, e forse non sono il solo; esiste tuttavia una maniera per ottenere le risposte ai nostri desideri (a volte pii): spostiamoci, nell'editor di visual basic, sulla zona modulo dove di solito compiliamo le istruzioni, digitiamo la parola : CreateObject, selezioniamo la parola col mouse e quindi premiamo il tasto F1; la guida, docile, ci mostrerà la pagina che cerchiamo. (non capisco perchè in questo modo la guida ci fornisce la pagina mentre da "cerca" non otteniamo niente), comunque questa sarà la pagina mostrata dalla guida in linea:

Ci accorgiamo, dalle spiegazioni, che la sintassi prevede di usare come primo argomento della funzione, una "Classe" di oggetti, ma mancano completamente spiegazioni su cosa sono queste "Classi", e l'esempio che eventualmente andremo a visualizzare, ci mostra solo un esempio su come "creare" un "oggetto Excel". Riporto solo, dell'esempio sulla guida, le spiegazioni : "In questo esempio la funzione CreateObject viene utilizzata per impostare un riferimento (xlApp) a Microsoft Excel. Il riferimento viene utilizzato per accedere alla proprietà Visible di Microsoft Excel e quindi viene utilizzato il metodo Quit di Microsoft Excel per chiudere il programma. Infine viene rilasciato il riferimento stesso". Direi che con questo esempio difficilmente riusciremo a impostare istruzioni che mirino all'oggetto FileSystemObject ed ai suoi metodi.

Se però, nella finestra che vediamo sopra, clicchiamo sul link "Vedere anche", si aprirà una finestra che mostra argomenti correlati al CreateObject, dove appare anche la voce "Oggetto FileSystemObject"

Finalmente cliccando la voce, si aprirà la finestra della guida che ci mostrerà come utilizzare questo oggetto, e cliccando sul link "Metodi", si aprirà la finestra che mostrerà, per una scelta, tutti i metodi elencati sopra. Questa la finestra della guida relativa all'oggetto FileSystemObject:

E' solo a questo punto che vediamo e capiamo come usare la sintassi che ci consente con CreateObject di accedere all'oggetto FileSystemObject, che è l'interfaccia di automazione. E' in funzione del Metodo del Fso  che sceglieremo, che otterremo l'azione voluta. Potremo aprire, copiare, eliminare, spostare files e cartelle, e tutte le azioni previste dai Metodi su elencati.

Le istruzioni prevedono di impostare con l'istruzione Set, una variabile che restituisca l'oggetto creato (nell'esempio "fs", ma potrà essere un qualsiasi nome, compreso "pippo" e perchè no, anche "pluto"). Con la seconda riga di istruzioni si imposta un'altra variabile ("a"), che restituisca il "cosa" vogliamo fare con l'oggetto creato, e che viene definito dal "Metodo" che avremo scelto applicato alla variabile che identifica l'oggetto ("fs"), cioè di creare un file di testo ("CreateTextFile"), seguito dal percorso completo che specifica su quale Unità, in quale cartella e con che nome salvare il file creato.. Quindi seguono le istruzioni su cosa scrivere nel file di testo.

Tutto chiaro? No, suppongo, e allora vediamo l'esempio pratico di istruire un'istruzione per cancellare un fie presente su un hard-disk Ovviamente dovremo usare una variabile che identifichi il file da eliminare (o qualunque altra azione consentita dal Metodo scelto). Per prima cosa dimensioniamo le variabili:

  • Dim fs, filespec

poi assegniamo ad una variabile, ("filespec") il file specifico su cui intendiamo compiere l'azione, completo di percorso

  • filespec = "C:\Documenti\TuoFile.xls"

ora impostiamo la variabile che restituirà l'oggetto creato con CreateObject (questa è l'istruzione di base che dovremmo impostare per lavorare con uno qualsiasi dei metodi del FileSystemObject)

  • Set fs = CreateObject("Scripting.FileSystemObject")

ora impostiamo il Metodo da usare con l'oggetto creato, oppure impostare la variabile che restituirà (o se preferite, ci consente di definire il metodo da usare con l'oggetto creato) quando dovremo sviluppare istruzioni particolari. Nel caso del Metodo Deletefile, è sufficiente scrivere

  • fs.deletefile filespec

cioè : cancella il file (filespec) al quale ci siamo riferiti tramite "fs". Poichè se il file indicato con "filespec" non esiste, o è in un'altra cartella, si genererebbe un errore, sfruttiamo un'altro Metodo del Fso, per impostare un controllo che verifichi se il file esiste ( Metodo"FileExists"), se il file esiste lo eliminiamo con "DeleteFile", e quindi scarichiamo la memoria cancellando la variabile "fs":

  • Sub CancellaFile()
    Dim fs, filespec
    filespec = "C:\Temp\Urca.xls"
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FileExists(filespec) = True Then
    fs.DeleteFile filespec

    Set fs = Nothing
    End If
    End Sub

Trovate altri esempi di istruzioni basate su CreateObject anche nell'articolo "DriveList, Dirlist, FileList" presente in questa sezione. Vediamo comunque un'altro esempio per spostare una cartella, e che sfrutta il metodo MoveFolder dell'oggetto Fso (rimando il lettore alla guida in linea su questo metodo, per verificare compatibilità e limitazioni). Sposteremo una cartella posta sull'hard-dirk C:\  come una sottocartella dentro un'altra cartella sullo stesso Hard-disk

  • Sub MoveAFolder()
    Dim fso, Drivespec
    Drivespec = "C:\Fatture"
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.MoveFolder Drivespec, "C:\Documenti\"
    Set fso = Nothing
    End Sub

Come si vede, con Drivespec si indica il percorso della cartella da muovere ("C:\Fatture"), poi si imposta con la variabile "fso" il CreateObject, quindi si usa con "fso" il metodo "MoveFolder" indicando la cartella da spostare (Drivespec) e dopo la virgola, il percorso che indica la cartella dentro la quale spostarla, poi eliminiamo la variabile "fso" dalla memoria.

Se invece vogliamo copiare uno o più file da una cartella ad un'altra, dovremo usare il metodo CopyFile, indicando il percorso di origine del file da copiare, seguito da una virgola, e dal percorso della cartella di destinazione, così:

  • Sub CopiaFile()
    Dim fs
    Set fs = CreateObject("Scripting.FileSystemObject")
    fs.copyfile "C:\TuaCartellaOrigine\NomeFile.doc", "C:\CartellaDestino\", True
    Set fs = Nothing
    End Sub

L'istruzione prevede che i due percorsi (origine,destinazione) siano racchiusi tra doppi apici (sono stringhe) e separati dalla virgola; l'argomento True determina la sovrascrittura nella cartella destino di eventuale file con lo stesso nome. é possibile copiare più file usando i caratteri jolly per definire parte del nome dei file di origine, esempio :"C:\TuaCartellaOrigine\Fatt*.doc" e saranno copiati tutti i file dal nome iniziale "Fatt" con estensione .doc, oppure tutti i file con una determinata estensione, esempio : "C:\TuaCartellaOrigine\*.doc" e saranno copiati tutti i file con estensione .doc. Se la cartella destinazione non esiste, si genererà un errore; eventualmente usare il metodo CreateFolder per creare prima una cartella destino. Attenzione alle maiuscole/minuscole, event. usare Option Compare Text inserita nella sezione Generale-dichiarazioni del modulo.

Spero di avere se non altro fornito una spiegazione comprensibile, anche se poco tecnica e necessariamente poco completa.

Buon lavoro.

prelevato sul sito www.ennius.altervista.org