|
New Page 2
|
오늘의 데일리 팁에서는
Dir()함수를 이용한 사용자 정의 함수
3종 세트를 소개합니다.
물론 DIR명령은
도스시절 가장 많이 사용하던 내부명령어였습니다. PC를
갖고 놀다 심심하면 툭툭 던져보는 명령어였습니다.
그런데 이 낡았지만 훌륭한 명령어를 아직도 VB/VBA에서는
Dir()함수로서 잘 사용하고 있습니다.
물론 특정 폴더의 내용을
탐색하기 위해 사용합니다. 대표적으로 파일의
존재여부를 확인하기 위해 다음과 같이 사용합니다.
'//----------------------------------------
'// Name Function FileExists(...)
'// Description 파일이 존재하는지 확인
'// Arguments strFileName As String-파일명
'// Returns True-존재,False-존재않음
'//----------------------------------------
Private Function FileExists(ByVal strFileName As
String) As Boolean
If Len(Dir(strFileName)) <> 0 Then
FileExists = True
Else
FileExists = False
End If
End Function |
위의 코드에서
Dir()함수에 존재유무를 확인하기 위한 파일의 이름을 매개변수(strFileName)를
던져 줍니다. 그래서 파일이 존재한다면 해당파일의 이름을 돌려주지만 아니라면 빈 문자열("")을
돌려주게 됩니다. 그래서 이것을 문자열의 길이를 알려주는 Len()함수로 확인하여
존재유무를 확인하는 것입니다.
Dir()함수는 파일 뿐만 아니라 디렉토리 즉 폴더의
존재유무를 확인하는 경우에도 사용합니다. 대신 매개변수로서 검색하려는 폴더명( *.*
포함) 뿐만 아니라 vbDirectory라는 vb상수를 추가해줍니다. 다음은 폴더
존재유무를 검색하는 사용자 정의 함수입니다.
'//----------------------------------------
'// Name Function DirExists(...)
'// Description 폴더가 존재하는지 확인
'// Arguments strDirName As String-폴더명
'// Returns True-존재,False-존재않음
'//----------------------------------------
Function DirExists(ByVal strDirName As String)
As Integer
Dim strDummy As String
On Error Resume Next
If Right$(strDirName, 1) <> "\" Then
strDirName = strDirName & "\"
End If
strDummy = Dir$(strDirName & "*.*", vbDirectory)
DirExists = Not (strDummy = vbNullString)
Err = 0
End Function |
그리고 마지막으로 폴더내 파일의 목록을 검색하는 기능을 다음과 같이 만들어서 사용할 수도
있습니다. 아래의 사용자 정의 함수 내용을 보시면 폴더의 내용을 검색하는 경우 Dir()함수를 2번
이상 사용하게 됩니다. Do~Loop를 돌기 전에 한 번 사용하고 Do~Loop안에서
또 사용을 한다는 점을 유의하시길 바랍니다.
‘//----------------------------------------
'// Name Function GetFileList(...)
'// Description 지정한 폴더의 파일목록을 돌려줌
'// Arguments
'// ...strDirPath As String - 검색할 폴더명
'// ...Optional strFileSpec As String = "*.*" -
검색할 파일 조건, 기본값(모든파일)
'// ...Optional strDelim As String = "," - 돌려줄
파일목록을 구분하는 기호, 기본값(,)
'// Returns 파일목록 문자열
'//----------------------------------------
Function GetFileList(strDirPath As String, _
Optional strFileSpec As String = "*.*", _
Optional strDelim As String = ",") As String
Dim
strFileList As String
Dim strFileNames As String
Dim strTemp As String
strDirPath
= IIf(Right(strDirPath, 1) <>
Application.PathSeparator, strDirPath &
Application.PathSeparator, strDirPath)
strFileNames = strDirPath & strFileSpec
strTemp = Dir(strFileNames)
Do Until
Len(strTemp) = 0
strFileList = strFileList & strTemp & strDelim
strTemp = Dir()
Loop
GetFileList = IIf(Len(strFileList) > 1, Left(strFileList,
Len(strFileList) - 1), "")
End Function |
|
|
|
|