WinInet API를 사용한다.
소스
' FTP에서 지정된 디렉토리나 파일 유무를 확인한다.
Option Explicit

Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000

Private Sub Command1_Click()
    Text2.Text = GetUrlSource(Combo1.Text)
    MousePointer = vbDefault
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If Not KeyCode = vbKeyReturn Then Exit Sub
    If Not Len(Text1.Text) > 0 Then Exit Sub
    MsgBox "URL(파일)이 존재" & IIf(CheckURL(Text1.Text), "합니다.", "하지 않습니다.") ' URL 존재 유무 검사
End Sub

Private Function CheckURL(sURL As String) As Boolean
    Dim hInternet As Long ' 오픈한 URL 핸들
    Dim hSession As Long ' WinInet 핸들
    Dim lReturn As Long ' 반환값
   
    CheckURL = False
    hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0) ' WinInet을 사용하기 위해 초기화 한여, WinInet 핸들들 얻는다.
    If Not CBool(hSession) Then Exit Function ' WinInet 초기화 하지 못한 경우
    hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, INTERNET_FLAG_NO_CACHE_WRITE, 0) ' URL 확인
    If Not CBool(hInternet) Then
        lReturn = InternetCloseHandle(hSession) ' WinInet 핸들 닫기
        Exit Function
    End If
    CheckURL = True
    lReturn = InternetCloseHandle(hInternet)
    lReturn = InternetCloseHandle(hSession) ' WinInet 핸들 닫기
End Function

실행하면 다음과 같은 창이 뜹니다.



텍스트 박스 창에 존재하는 파일의 FTP 서버의 URL을 지정하면


다음과 같이 존재하는 메세지 창을 뛰운다


존재하지 않는 파일의 FTP 서버의 URL을 지정하면


다음과 같이 파일이 존재하지 않는다는 창이 뜹니다.


파일 경로 말고, 디렉토리도 마찬가지로 가능하다. 그러나 HTTP에서는 대부분이 불가능하다고 봐야 한다.

+ Recent posts