Visual Basic Tips


FTP(API)


WinInet.DLLを使用してFTPのGET(ダウンロード)とPUT(アップロード)を実現させるサンプルです。

'----------------------------------------------------------
' FTP GET
'----------------------------------------------------------
Function FtpGet(strFtpSvr As String, strUserID As String, strPassword As String, strRemoteFile As String, strLocalFile As String) As Boolean
  
Dim hInternet As Long
  
Dim hFTP As Long
  
Dim lngret As Long
  
Dim strErrText As String

  FtpGet =
True

  
On Error GoTo ErrHandler

  hInternet = InternetOpen(vbNullString, _
                INTERNET_OPEN_TYPE_PRECONFIG, _
                vbNullString, _
                vbNullString, _
                0&)
  
If hInternet = 0 Then
    strErrText = "InternetOpen:GetLastError=" & Err.LastDllError()
    MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpGet>"
    FtpGet =
False
    
Exit Function
  
End If
  hFTP = InternetConnect(hInternet, _
               strFtpSvr, _
               INTERNET_DEFAULT_FTP_PORT, _
               strUserID, _
               strPassword, _
               INTERNET_SERVICE_FTP, _
               0&, _
               0&)
  
If hFTP = 0 Then
    strErrText = "InternetConnect:GetLastError=" & Err.LastDllError()
    MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpGet>"
    FtpGet =
False
    
Exit Function
  End If
  lngret = FtpGetFile(hFTP, _
             strRemoteFile & vbNullChar, _
             strLocalFile & vbNullChar, _
             1&, _
             0&, _
             FTP_TRANSFER_TYPE_BINARY, _
             0&)
  lngret = InternetCloseHandle(hFTP)
  lngret = InternetCloseHandle(hInternet)

  
Exit Function
ErrHandler:
  FtpGet =
False
  MsgBox "<" & Err & ">" & Error(Err), vbOKOnly + vbExclamation, App.Title & "<FtpGet>"
End Function

'----------------------------------------------------------
' FTP PUT
'----------------------------------------------------------

Function FtpPut(strFtpSvr As String, strUserID As String, strPassword As String, strRemoteFile As String, strLocalFile As String) As Boolean
  
Dim hInternet As Long
 
 Dim hFTP As Long
  
Dim lngret As Long
  
Dim strErrText As String

  FtpPut =
True

  On Error GoTo ErrHandler

  hInternet = InternetOpen(vbNullString, _
                INTERNET_OPEN_TYPE_PRECONFIG, _
                vbNullString, _
                vbNullString, _
                0&)
  
If hInternet = 0 Then
    strErrText = "InternetOpen:GetLastError=" & Err.LastDllError()
    MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
    FtpPut =
False
    
Exit Function
  
End If
  hFTP = InternetConnect(hInternet, _
               strFtpSvr, _
               INTERNET_DEFAULT_FTP_PORT, _
               strUserID, _
               strPassword, _
               INTERNET_SERVICE_FTP, _
               0&, _
               0&)
  
If hFTP = 0 Then
    strErrText = "InternetConnect:GetLastError=" & Err.LastDllError()
    MsgBox strErrText, vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
    FtpPut =
False
    
Exit Function
  
End If
  lngret = FtpPutFile(hFTP, _
             strLocalFile & vbNullChar, _
             strRemoteFile & vbNullChar, _
             FTP_TRANSFER_TYPE_BINARY, _
             0&)
  lngret = InternetCloseHandle(hFTP)
  lngret = InternetCloseHandle(hInternet)
  
Exit Function
ErrHandler:
  FtpPut =
False
  MsgBox "<" & Err & ">" & Error(Err), vbOKOnly + vbExclamation, App.Title & "<FtpPut>"
End Function

'-------------------------------------------------------
' Module
'-------------------------------------------------------
'API定数宣言
Public Const INTERNET_OPEN_TYPE_PRECONFIG As Long = 0& 'IEの設定に従い接続
Public Const INTERNET_OPEN_TYPE_DIRECT As Long = 1& '直接接続
Public Const INTERNET_OPEN_TYPE_PROXY As Long = 3& 'Proxy経由接続
Public Const INTERNET_DEFAULT_FTP_PORT As Long = 21& 'RFCで既定されたftpポート
Public Const INTERNET_DEFAULT_HTTP_PORT As Long = 80& 'RFCで既定されたhttpポート
Public Const INTERNET_DEFAULT_HTTPS_PORT As Long = 443& 'RFCで既定されたhttpsポート
Public Const INTERNET_SERVICE_FTP As Long = 1& 'ftpを指定
Public Const INTERNET_SERVICE_HTTP As Long = 3& 'http/httpsを指定
Public Const INTERNET_FLAG_PASSIVE As Long = &H8000000
Public Const INTERNET_FLAG_RELOAD As Long = &H80000000 'キャシュを使わない
Public Const FTP_TRANSFER_TYPE_ASCII As Long = &H1& 'Asciiモードで転送
Public Const FTP_TRANSFER_TYPE_BINARY As Long = &H2& 'Binaryモードで転送

'API宣言
Public Declare Function InternetOpen Lib "WinInet.DLL" Alias "InternetOpenA" (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long

Public Declare Function
InternetConnect Lib "WinInet.DLL" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal lpszServerName As String, ByVal nServerPort As Long, ByVal lpszUserName As String, ByVal lpszPassword As String, ByVal dwService As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

Public Declare Function
FtpGetFile Lib "WinInet.DLL" Alias "FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Long, ByVal dwLocalFlagsAndAttributes As Long, ByVal dwInternetFlags As Long, ByVal dwContext As Long) As Long

Public Declare Function
FtpPutFile Lib "WinInet.DLL" Alias "FtpPutFileA" (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, ByVal lpszNewRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

Public Declare Function
InternetCloseHandle Lib "WinInet.DLL" (ByVal hInternetSession As Long) As Long

Public Declare Function
InternetGetLastResponseInfo Lib "WinInet.DLL" Alias "InternetGetLastResponseInfoA" (lpdwError As Long, lpszBuffer As Byte, lpdwBufferLength As Long) As Long


DownLoad vbtips103.lzh 3KB (VB6.0)