Creare un percorso completo (se non esiste)

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
1.537
273
83
Italy
2013 2019
114
A volte può essere necessario creare una cartella di un determinato percorso, ma non sempre si sa se tutto il percorso è già esistente.

Facciamo un esempio pratico.

Supponiamo di dover creare una cartella \MyApp\LOG\ sotto la cartella \AppData\Local dell'utente corrente, che si chiama mario.
Quindi il percorso completo che ci serve ottenere diventa:

C:\Users\mario\AppData\Local\MyApp\LOG\


Ora, sappiamo che per ottenere il nome dell'utente possiamo usare la funzione Environ:

Visual Basic:
Dim User As String
User = Environ("USERNAME")
per cui dovrebbe essere sufficiente indicare:
C:\Users\" & User & "\AppData\Local\MyApp\LOG\

Ma si può fare ancora meglio, sempre grazie ad Environ a cui passeremo il parametro LOCALAPPDATA per ottenere già il percorso completo dell'utente corrente, non importa quale nome abbia:

Visual Basic:
Dim sPath As String
sPath = Environ("LOCALAPPDATA")
ed otterremo in un colpo solo:
Visual Basic:
C:\Users\mario\AppData\Local
Bene, ora dobbiamo fare in modo di creare la parte mancante: \MyApp\LOG\
Ora, usando la funzione MkDir dovremmo prima creare la cartella \MyApp
e poi creare la sotto cartella \LOG

Ovviamente, dovendo gestire anche tutti gli eventuali errori (sia nel caso esista già, sia nel caso che non esista, o l'uno o l'altra o entrambe)

La routine sottostante permette invece di creare autonomamente il percorso completo e, nel caso, crea anche tutte le sotto-cartelle:

Visual Basic:
Public Function MakeDirPath(dirname As String) As Boolean
    On Error GoTo ERR_HANDLER
    Dim i As Long, path As String
    Do
        i = InStr(i + 1, dirname & "\", "\")
        path = Left$(dirname, i - 1)
        ' non cerca di creare una directory root
        If Right$(path, 1) <> ":" And Dir$(path, vbDirectory) = "" Then
            ' se non esiste, crea questa sotto-cartella
            MkDir path
        End If
    Loop Until i >= Len(dirname)

    MakeDirPath = True
EXIT_PROC:
    On Error GoTo 0
    Exit Sub

ERR_HANDLER:
    ' Gestiamo tutti i possibili errori:
    If Err.Number = 52 Then Resume Next 'Nome o numero di file non valido. se il percorso è il nome di un server (es. \\Server01)
    If Err.Number = 76 Then Resume Next 'Impossibile trovare il percorso.
    If Err.Number = 75 Then Resume Next ' Errore di accesso al percorso/file
    MsgBox Err.Description & vbCrLf & "nella function: MakeDirPath", vbExclamation
End Sub

A questo punto, diventa semplice utilizzare la routine così:

Visual Basic:
Dim sPercorso As String
sPercorso = sPath & "\MyApp\LOG"
MakeDirPath sPercorso
poi, per verificare che tutto sia andato come ci si aspetta, si esegue:
Visual Basic:
Dir$(sPercorso, vbDirectory) = ""
 

Allegati

Ultima modifica:

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!