Zoeken…


Opmerkingen

Het Scripting.FileSystemObject is veel robuuster dan de oudere methoden in dit onderwerp. In bijna alle gevallen verdient het de voorkeur.

Bepalen of mappen en bestanden bestaan

bestanden:

Om te bepalen of een bestand bestaat, geeft u de bestandsnaam gewoon door aan de functie Dir$ en test u of het een resultaat oplevert. Merk op dat Dir$ pathName ondersteunt, dus om te testen op een specifiek bestand, moet de doorgegeven pathName worden getest om ervoor te zorgen dat deze ze niet bevat. Het onderstaande voorbeeld geeft een foutmelding - als dit niet het gewenste gedrag is, kan de functie worden gewijzigd om eenvoudig False te retourneren.

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

Mappen (Dir $ -methode):

De functie Dir$() kan ook worden gebruikt om te bepalen of er een map bestaat door vbDirectory door te geven voor de parameter optionele attributes . In dit geval moet de doorgegeven waarde pathName eindigen op een pathName ( \ ), omdat overeenkomende bestandsnamen valse positieven veroorzaken. Houd er rekening mee dat jokertekens alleen zijn toegestaan na het laatste padscheidingsteken, dus de onderstaande voorbeeldfunctie geeft een runtime-fout 52 - "Onjuiste bestandsnaam of -nummer" als de invoer een jokerteken bevat. Als dit niet het gewenste gedrag is, uncomment On Error Resume Next bovenaan de functie. Onthoud ook dat Dir$ relatieve bestandspaden ondersteunt (bijv. ..\Foo\Bar ), zodat de resultaten alleen geldig zijn zolang de huidige werkmap niet wordt gewijzigd.

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

Mappen (ChDir-methode):

De ChDir instructie kan ook worden gebruikt om te testen of er een map bestaat. Merk op dat deze methode de omgeving waarin VBA wordt uitgevoerd tijdelijk zal veranderen, dus als dat een overweging is, moet in plaats daarvan de Dir$ -methode worden gebruikt. Het heeft het voordeel dat het veel minder vergevingsgezind is met zijn parameter. Deze methode ondersteunt ook relatieve bestandspaden, dus heeft dezelfde waarschuwing als de 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

Bestandsmappen maken en verwijderen


OPMERKING: Om het kort te houden, gebruiken de onderstaande voorbeelden de functie FolderExists uit het voorbeeld Bepalen of mappen en bestanden bestaan in dit onderwerp.


De MkDir instructie kan worden gebruikt om een nieuwe map te maken. Het accepteert paden met stationsletters ( C:\Foo ), UNC-namen ( \\Server\Foo ), relatieve paden ( ..\Foo ) of de huidige werkmap ( Foo ).

Als de schijf- of UNC-naam wordt weggelaten (bijv. \Foo ), wordt de map op de huidige schijf gemaakt. Dit kan al dan niet hetzelfde station zijn als de huidige werkmap.

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

De RmDir instructie kan worden gebruikt om bestaande mappen te verwijderen. Het accepteert paden in dezelfde vorm als MkDir en gebruikt dezelfde relatie tot de huidige werkmap en schijf. Merk op dat de instructie vergelijkbaar is met de Windows rd shell-opdracht, dus een runtime-fout 75 veroorzaakt: "Path / File access error" als de doelmap niet leeg is.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow