PDA

View Full Version : [Vb] verificare l'esistenza di una directory


first register
01-09-2009, 23:34
Vorrei sapere se c'è un modo rapido per verificare l'esistenza di una directory e nel caso in cui la directory non sia presente sul disco, per crearne una.

Ad esempio la mia applicazione va a caricare le immagini nella cartella C:\immagini\ ora, nel caso in cui l'applicazione sia avviata per la prima volta, la cartella potrebbe non essere presente sul disco e l'applicazione va in errore.

Pensavo di fare una verifica nel Form Load, ma come gestisco l'errore e la creazione della directory ?

Y3PP4
02-09-2009, 00:16
Premetto che non conosco VB e non sò che versione stai usando, ma per darti una mano mi son fatto una googlata e ho trovato questo per il "directory check" (http://vbcodesource.org/tips/?p=201) e questo per il make dir (http://www.pierotofy.it/pages/extras/forum/6/20893-creare_directory/).

Spero ti siano di aiuto,

ciao!

||ElChE||88
02-09-2009, 00:24
Dir e MkDir se VB6, Directory.Exists e Directory.CreateDirectory se VB.Net.

first register
02-09-2009, 00:27
Grazie mille! la versione è la 6.0, un pò old ma si tratta di applicazioni semplici e non mi va di cambiare.
Ho dato un occhiata alla funzione Dir e dovrebbe andare... speriamo.

If Dir( "c:\myFile.txt") <> "" Then

MsgBox "It Exists!"
Else

MsgBox "No Go!"

End If


grazie.
:)

first register
02-09-2009, 00:47
La funzione DIR permette di verificare l'esistenza dei file, ma non funziona con le directory... :stordita:

MarcoGG
02-09-2009, 08:25
Vorrei sapere se c'è un modo rapido per verificare l'esistenza di una directory e nel caso in cui la directory non sia presente sul disco, per crearne una.

Ad esempio la mia applicazione va a caricare le immagini nella cartella C:\immagini\ ora, nel caso in cui l'applicazione sia avviata per la prima volta, la cartella potrebbe non essere presente sul disco e l'applicazione va in errore.

Pensavo di fare una verifica nel Form Load, ma come gestisco l'errore e la creazione della directory ?

La gestione degli errori in questo caso è superflua. Basta, come sempre, usare la libreria giusta. Aggiungi al progetto un Rif. alla libreria "Microsoft Scripting Runtime", dopodichè giocare con cartelle e files è facile :

Dim percorsoDir As String
percorsoDir = "C:\immagini"

Dim FSO As Scripting.FileSystemObject
Set FSO = New Scripting.FileSystemObject
If FSO.FolderExists(percorsoDir) Then
MsgBox "Directory già esistente."
Else
FSO.CreateFolder (percorsoDir)
MsgBox "Directory creata."
End If

;)

||ElChE||88
02-09-2009, 11:37
La gestione degli errori in questo caso è superflua. Basta, come sempre, usare la libreria giusta. Aggiungi al progetto un Rif. alla libreria "Microsoft Scripting Runtime", dopodichè giocare con cartelle e files è facile :
Per curiosità (di VB6 ne so veramente poco), che vantaggio c'è nell'usare la MSR invece di funzioni built-in come Dir e MkDir?

MarcoGG
02-09-2009, 14:43
Per curiosità (di VB6 ne so veramente poco), che vantaggio c'è nell'usare la MSR invece di funzioni built-in come Dir e MkDir?

Finchè si fanno cose semplici, Dir e MkDir non hanno nessun particolare svantaggio. Il codice precedente può essere riscritto così :

Dim percorsoDir As String
percorsoDir = "C:\immagini"

If Dir(percorsoDir, vbDirectory) <> "" Then
MsgBox "Directory già esistente."
Else
MkDir percorsoDir
MsgBox "Directory creata."
End If

first_register non è riuscito ad usarlo perchè ha omesso il parametro vbDirectory.
Inoltre Dir e MkDir sono comandi base di VB6 e non necessitano di riferimenti esterni.

Se invece vogliamo un accesso al File System più agile e completo, molto meglio il Microsoft Scripting Runtime. La dll del Rif è : C:\WINDOWS\system32\scrrun.dll. Personalmente non ho mai avuto problemi.
Inoltre si possono usare molti altri metodi interessanti ( .CopyFile, .CopyFolder, .MoveFile, .MoveFolder, .DeleteFile, .DeleteFolder, .DriveExists, la collection .Drives, metodi per gli stream, e molti altri... ).
Insomma, ci si avvicina già di più alla completezza dello spacename My.Computer.FileSystem. di VB.NET... ;)

||ElChE||88
02-09-2009, 15:43
Grazie mille. :)

first register
02-09-2009, 20:27
si esatto, per verificare l'esistenza della directory ho utilizzato questo codice:

If Dir(App.Path & "\app\img\", vbDirectory) <> "" Then
MsgBox ("ok")
Directory exists, insert your file output code here
Else
MsgBox ("non esiste")
End If

Il file scrrun.dll si trova nella cartella windows32, ma se tento di caricare la libreria con il vb ottengo un messaggio di errore.
La dimensione del file è 168k è corretto ?

MarcoGG
03-09-2009, 08:00
Il file scrrun.dll si trova nella cartella windows32, ma se tento di caricare la libreria con il vb ottengo un messaggio di errore.
La dimensione del file è 168k è corretto ?

Cosa significa "caricare" ?
La devi semplicemente referenziare da menu Progetto / Riferimenti...

first register
03-09-2009, 08:57
Cosa significa "caricare" ?
La devi semplicemente referenziare da menu Progetto / Riferimenti...

Nella lista dei componenti non è presente la voce Microsoft Scripting Runtime, la dll scrrun.dll può essere selezionata manualmente all'interno della directory windows32 ma VB genera un messaggio di errore.

MarcoGG
03-09-2009, 11:07
Nella lista dei componenti non è presente la voce Microsoft Scripting Runtime, la dll scrrun.dll può essere selezionata manualmente all'interno della directory windows32 ma VB genera un messaggio di errore.

E il messaggio sarebbe ?
Usi Vista per caso ?

first register
03-09-2009, 17:36
http://img136.imageshack.us/img136/9580/erroren.png


La voce MS Runtime inizialmente non è presente nell'elenco, ma navigando su windows32 è possibile inserire la voce in elenco. Cliccando su OK, ottengo il messaggio di errore nell'immagine.

Uso XP.

MarcoGG
03-09-2009, 20:03
http://img136.imageshack.us/img136/9580/erroren.png


La voce MS Runtime inizialmente non è presente nell'elenco, ma navigando su windows32 è possibile inserire la voce in elenco. Cliccando su OK, ottengo il messaggio di errore nell'immagine.

Uso XP.

Ma per forza ! :doh:
Quella è la finestra dei controlli aggiuntivi ! :D

Microsoft Scripting Runtime va semplicemente referenziato aprendo la finestra dei Riferimenti : Menu Progetto / Riferimenti, NON Menu Progetto / Componenti.

scrrun.dll è una libreria di funzioni, non un controllo. Se tenti di caricare la libreria come controllo WinForm, ovvio che da errore. ;)

first register
03-09-2009, 21:05
errore mio:(
Non ricevo più errori, sostituirò DIR con le funzioni della libreria anche perchè mette a disposizione più possibilità di controllo su file e cartelle.
:)
grazie ancora.