Suche…


Bemerkungen

Das Scripting.FileSystemObject ist viel robuster als die in diesem Thema verwendeten Legacy-Methoden. Es sollte in fast allen Fällen bevorzugt werden.

Bestimmen, ob Ordner und Dateien vorhanden sind

Dateien:

Um festzustellen, ob eine Datei existiert, übergeben Sie einfach den Dateinamen an die Funktion Dir$ und testen Sie, ob ein Ergebnis zurückgegeben wird. Beachten Sie, dass Dir$ pathName zu prüfen, ob eine bestimmte Datei pathName sollte der übergebene pathName getestet werden, um sicherzustellen, dass er keine pathName enthält. Das folgende Beispiel gibt einen Fehler aus. Wenn dies nicht das gewünschte Verhalten ist, kann die Funktion geändert werden, um einfach 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

Ordner (Dir $ -Methode):

Die Funktion Dir$() kann auch verwendet werden, um zu ermitteln, ob ein Ordner vorhanden ist, indem vbDirectory für den optionalen attributes angegeben wird. In diesem Fall muss der übergebene pathName Wert mit einem pathName ( \ ) enden, da übereinstimmende Dateinamen zu falschen pathName führen. Beachten Sie, dass Platzhalterzeichen nur nach dem letzten Pfadtrennzeichen zulässig sind. Die Beispielfunktion unten verursacht einen Laufzeitfehler 52 - "Ungültiger Dateiname oder -nummer", wenn die Eingabe einen Platzhalter enthält. Wenn dies nicht das gewünschte Verhalten ist, entfernen On Error Resume Next Kommentar On Error Resume Next oben in der Funktion. Denken Sie auch daran, dass Dir$ relative Dateipfade unterstützt (z. B. ..\Foo\Bar ). Daher sind die Ergebnisse nur garantiert gültig, solange das aktuelle Arbeitsverzeichnis nicht geändert wird.

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

Ordner (ChDir-Methode):

Die ChDir Anweisung kann auch verwendet werden, um zu testen, ob ein Ordner vorhanden ist. Beachten Sie, dass diese Methode die Umgebung, in der VBA ausgeführt wird, vorübergehend ändert. Wenn dies eine Überlegung ist, sollte stattdessen die Dir$ -Methode verwendet werden. Es hat den Vorteil, dass es mit seinen Parametern viel weniger nachsichtig ist. Diese Methode unterstützt auch relative Dateipfade, hat also die gleiche Einschränkung wie die Dir$ -Methode.

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

Dateiordner erstellen und löschen


HINWEIS: Der Kürze halber verwenden die folgenden Beispiele die Funktion FolderExists aus dem Beispiel zum Bestimmen, ob Ordner und Dateien in diesem Thema vorhanden sind.


Die MkDir Anweisung kann zum Erstellen eines neuen Ordners verwendet werden. Es akzeptiert Pfade mit Laufwerksbuchstaben ( C:\Foo ), UNC-Namen ( \\Server\Foo ), relativen Pfaden ( ..\Foo ) oder dem aktuellen Arbeitsverzeichnis ( Foo ).

Wenn das Laufwerk oder der UNC-Name nicht angegeben wird (dh \Foo ), wird der Ordner auf dem aktuellen Laufwerk erstellt. Dies ist möglicherweise das gleiche Laufwerk wie das aktuelle Arbeitsverzeichnis.

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

Die RmDir Anweisung kann verwendet werden, um vorhandene Ordner zu löschen. Es akzeptiert Pfade in den gleichen Formularen wie MkDir und verwendet dieselbe Beziehung zum aktuellen Arbeitsverzeichnis und Laufwerk. Beachten Sie, dass die Anweisung dem Windows-Befehl rd shell ähnelt. rd wird ein Laufzeitfehler 75 ausgegeben: "Pfad / Dateizugriffsfehler", wenn das Zielverzeichnis nicht leer ist.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow