Ricerca…


Osservazioni

Scripting.FileSystemObject è molto più robusto dei metodi legacy in questo argomento. Dovrebbe essere preferito in quasi tutti i casi.

Determinare se esistono cartelle e file

File:

Per determinare se esiste un file, basta passare il nome del file alla funzione Dir$ e testare per vedere se restituisce un risultato. Nota che Dir$ supporta le wild card, quindi per testare un file specifico , il pathName passato deve essere testato per assicurarsi che non li contenga. L'esempio seguente genera un errore: se questo non è il comportamento desiderato, è possibile modificare la funzione per restituire semplicemente False .

Public Function FileExists(pathName As String) As Boolean
    If InStr(1, pathName, "*") Or InStr(1, pathName, "?") Then
        'Exit Function   'Return False on wild-cards.
        Err.Raise 52    'Raise error on wild-cards.
    End If
    FileExists = Dir$(pathName) <> vbNullString
End Function

Cartelle (metodo $ Dir):

La funzione Dir$() può anche essere utilizzata per determinare se esiste una cartella specificando il passaggio di vbDirectory per il parametro facoltativo degli attributes . In questo caso, il valore pathName passato deve terminare con un separatore di percorso ( \ ), poiché i nomi di file corrispondenti causano falsi positivi. Tieni presente che le wild card sono consentite solo dopo l'ultimo separatore del percorso, quindi la funzione di esempio seguente genererà un errore 52 - "Nome file o numero di file errato" se l'input contiene una wild card. Se questo non è il comportamento desiderato, il commento On Error Resume Next nella parte superiore della funzione. Ricorda inoltre che Dir$ supporta i percorsi dei file relativi (ad esempio ..\Foo\Bar ), pertanto i risultati sono validi solo se la directory di lavoro corrente non viene modificata.

Public Function FolderExists(ByVal pathName As String) As Boolean
    'Uncomment the "On Error" line if paths with wild-cards should return False
    'instead of raising an error.
    'On Error Resume Next    
    If pathName = vbNullString Or Right$(pathName, 1) <> "\" Then
        Exit Function
    End If
    FolderExists = Dir$(pathName, vbDirectory) <> vbNullString
End Function

Cartelle (metodo ChDir):

L'istruzione ChDir può anche essere utilizzata per verificare se esiste una cartella. Nota che questo metodo cambierà temporaneamente l'ambiente in cui VBA è in esecuzione, quindi se questa è una considerazione, dovrebbe essere usato il metodo Dir$ . Ha il vantaggio di essere molto meno indulgente con i suoi parametri. Questo metodo supporta anche i percorsi dei file relativi, quindi ha lo stesso avvertimento del metodo Dir$ .

Public Function FolderExists(ByVal pathName As String) As Boolean
    'Cache the current working directory
    Dim cached As String
    cached = CurDir$

    On Error Resume Next
    ChDir pathName
    FolderExists = Err.Number = 0
    On Error GoTo 0
    'Change back to the cached working directory.
    ChDir cached
End Function

Creazione ed eliminazione di cartelle di file


NOTA: per brevità, gli esempi seguenti utilizzano la funzione FolderExists dall'esempio Determinare se le cartelle e i file esistono in questo argomento.


L'istruzione MkDir può essere utilizzata per creare una nuova cartella. Accetta percorsi contenenti lettere di unità ( C:\Foo ), nomi UNC ( \\Server\Foo ), percorsi relativi ( ..\Foo ) o la directory di lavoro corrente ( Foo ).

Se viene omessa l'unità o il nome UNC (ad es. \Foo ), la cartella viene creata nell'unità corrente. Questo potrebbe essere o meno la stessa unità della directory di lavoro corrente.

Public Sub MakeNewDirectory(ByVal pathName As String)
    'MkDir will fail if the directory already exists.
    If FolderExists(pathName) Then Exit Sub
    'This may still fail due to permissions, etc.
    MkDir pathName
End Sub

L'istruzione RmDir può essere utilizzata per eliminare le cartelle esistenti. Accetta percorsi nelle stesse forme di MkDir e utilizza la stessa relazione con la directory di lavoro e l'unità correnti. Si noti che l'istruzione è simile al comando di Windows rd shell, pertanto verrà generato un errore 75 di run-time: "Errore di accesso al percorso / file" se la directory di destinazione non è vuota.

Public Sub DeleteDirectory(ByVal pathName As String)
    If Right$(pathName, 1) <> "\" Then
        pathName = pathName & "\"
    End If
    'Rmdir will fail if the directory doesn't exist.
    If Not FolderExists(pathName) Then Exit Sub
    'Rmdir will fail if the directory contains files.
    If Dir$(pathName & "*") <> vbNullString Then Exit Sub
    
    'Rmdir will fail if the directory contains directories.
    Dim subDir As String
    subDir = Dir$(pathName & "*", vbDirectory)
    Do
        If subDir <> "." And subDir <> ".." Then Exit Sub
        subDir = Dir$(, vbDirectory)
    Loop While subDir <> vbNullString
    
    'This may still fail due to permissions, etc.
    RmDir pathName
End Sub


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow