수색…


비고

Scripting.FileSystemObject 는이 항목의 레거시 메서드보다 훨씬 강력합니다. 거의 모든 경우에 선호되어야합니다.

폴더 및 파일이 있는지 결정

파일 :

파일이 있는지 확인하려면 파일 이름을 Dir$ 함수에 전달하고 결과가 반환되는지 테스트하십시오. Dir$ 는 와일드 카드를 지원하므로 특정 파일을 테스트하려면 전달 된 pathNamepathName 을 포함하지 않는지 테스트해야합니다. 아래 예제에서는 오류가 발생합니다. 원하는 동작이 아닌 경우 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

폴더 (디렉터리 $ 메서드) :

Dir$() 함수는 선택적 attributes 매개 변수에 전달되는 vbDirectory 를 지정하여 폴더가 존재하는지 확인하는 데에도 사용할 수 있습니다. 이 경우 전달 된 pathName 값은 경로 구분 기호 ( \ )로 끝나야합니다. 일치하는 파일 이름 은 오 탐지를 일으킬 수 있기 때문입니다. 와일드 카드는 마지막 경로 분리 문자 다음에 만 사용할 수 있으므로 입력에 와일드 카드가 포함되어 있으면 아래 예제 함수는 런타임 오류 52 - "잘못된 파일 이름 또는 번호"를 반환합니다. 원하는 동작이 아닌 경우 함수의 맨 위에있는 On Error Resume Next 를 주석 처리하십시오. 또한 Dir$ 는 상대 파일 경로 (예 : ..\Foo\Bar )를 지원하므로 결과는 현재 작업 디렉토리가 변경되지 않는 한 유효한 것으로 보장됩니다.

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

폴더 (ChDir 메서드) :

ChDir 문은 폴더가 있는지 테스트하는데도 사용할 수 있습니다. 이 메서드는 일시적으로 VBA가 실행되는 환경을 변경하므로 고려해야 할 경우 Dir$ 메서드를 사용해야합니다. 그것의 매개 변수로 용서하는 것이 훨씬 적다는 장점이 있습니다. 이 방법은 또한 상대 파일 경로를 지원하므로 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

파일 폴더 만들기 및 삭제


참고 : 간결하게하기 위해 아래 예제에서는이 항목의 폴더 및 파일있는지 여부를 확인 하는 예제에서 FolderExists 함수를 사용합니다.


MkDir 문을 사용하여 새 폴더를 만들 수 있습니다. 드라이브 문자 ( C:\Foo ), UNC 이름 ( \\Server\Foo ), 상대 경로 ( ..\Foo ) 또는 현재 작업 디렉토리 ( Foo )를 포함하는 경로를 허용합니다.

드라이브 또는 UNC 이름이 생략 된 경우 (예 : \Foo ) 폴더는 현재 드라이브에 생성됩니다. 이것은 현재 작업 디렉토리와 동일한 드라이브 일 수도 있고 그렇지 않을 수도 있습니다.

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

RmDir 문은 기존 폴더를 삭제하는 데 사용할 수 있습니다. MkDir 과 동일한 양식의 경로를 허용하고 현재 작업 디렉토리 및 드라이브와 동일한 관계를 사용합니다. 명령문은 Windows rd shell 명령과 유사하므로 대상 디렉토리가 비어 있지 않으면 "Path / File access error"런타임 오류 75가 발생합니다.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow