VB6 リファレンス お品書き へ戻ります
Visual Basic6 リファレンス


VB6 FTP操作 (API)
API(WinInet.DLL)を使ったFTP接続・操作

WinInet API

ソースはVB6用で記述しています。VB.NET以降のバージョンは型宣言に注意してください
(VB6:Long → VB.NET以降:Integer)
(VB6:Integer → VB.NET以降:Short)

お品書き
● 標準モジュールAPI定義 標準モジュール
● サンプル プログラムテキストファイルをダウンロードするサンプル プログラム
● サンプル プログラムテキストファイルをアップロードするサンプル プログラム
● サンプル プログラム指定ディレクトリのファイル一覧を取得するサンプル プログラム
● InternetOpenインターネットサービスのオープン
● InternetConnectFTPサーバへ接続
● InternetCloseHandleインターネットサービスのクローズ
● FtpGetCurrentDirectoryFTPサーバのカレントディレクトリを取得
● FtpSetCurrentDirectoryFTPサーバのカレントディレクトリを変更
● FtpGetFileFTPサーバからファイルを取得
● FtpPutFileFTPサーバへファイルを転送
● FtpDeleteFileFTPサーバのファイルを削除
● FtpRenameFileFTPサーバのファイル名を変更
● FtpRemoveDirectoryFTPサーバのディレクトリを削除
● 標準モジュール(エラー定数)API定義 標準モジュール(エラー定数)


● API定義 標準モジュール

' Constants - InternetOpen.lAccessType
Public Const INTERNET_OPEN_TYPE_PRECONFIG As Long = 0&
Public Const INTERNET_OPEN_TYPE_DIRECT As Long = 1&
Public Const INTERNET_OPEN_TYPE_PROXY As Long = 3&
Public Const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY As Long = 4&

' Constants - InternetOpen.dwFlags
Public Const INTERNET_FLAG_ASYNC As Long = &H10000000
Public Const INTERNET_FLAG_FROM_CACHE As Long = &H1000000
Public Const INTERNET_FLAG_OFFLINE As Long = INTERNET_FLAG_FROM_CACHE

' Constants - InternetConnect.nServerPort
Public Const INTERNET_INVALID_PORT_NUMBER As Long = 0&
Public Const INTERNET_DEFAULT_FTP_PORT As Long = 21&
Public Const INTERNET_DEFAULT_GOPHER_PORT As Long = 70&
Public Const INTERNET_DEFAULT_HTTP_PORT As Long = 80&
Public Const INTERNET_DEFAULT_HTTPS_PORT As Long = 443&
Public Const INTERNET_DEFAULT_SOCKS_PORT As Long = 1080&

' Constants - InternetConnect.dwService
Public Const INTERNET_SERVICE_FTP As Long = 1&
Public Const INTERNET_SERVICE_GOPHER As Long = 2&
Public Const INTERNET_SERVICE_HTTP As Long = 3&

' Constants - InternetConnect.dwFlags
Public Const INTERNET_FLAG_PASSIVE As Long = &H8000000

' Constants - FtpGetFile.dwFlags (FTP TransferType)
' Constants - FtpPutFile.dwFlags (FTP TransferType)
Public Const FTP_TRANSFER_TYPE_UNKNOWN As Long = &H0&
Public Const FTP_TRANSFER_TYPE_ASCII As Long = &H1&
Public Const FTP_TRANSFER_TYPE_BINARY As Long = &H2&
Public Const INTERNET_FLAG_TRANSFER_ASCII As Long = FTP_TRANSFER_TYPE_ASCII
Public Const INTERNET_FLAG_TRANSFER_BINARY As Long = FTP_TRANSFER_TYPE_BINARY

' Constants - FtpGetFile.dwFlags (Cache Flags)
' Constants - FtpPutFile.dwFlags (Cache Flags)
Public Const INTERNET_FLAG_RELOAD As Long = &H80000000
Public Const INTERNET_FLAG_RESYNCHRONIZE As Long = &H800
Public Const INTERNET_FLAG_NEED_FILE As Long = &H10
Public Const INTERNET_FLAG_HYPERLINK As Long = &H400

' Constants - FtpGetFile.dwFlagsAndAttributes
Public Const FILE_ATTRIBUTE_ARCHIVE As Long = &H20
Public Const FILE_ATTRIBUTE_ENCRYPTED As Long = &H4000
Public Const FILE_ATTRIBUTE_HIDDEN As Long = &H2
Public Const FILE_ATTRIBUTE_NORMAL As Long = &H80
Public Const FILE_ATTRIBUTE_OFFLINE As Long = &H1000
Public Const FILE_ATTRIBUTE_READONLY As Long = &H1
Public Const FILE_ATTRIBUTE_SYSTEM As Long = &H4
Public Const FILE_ATTRIBUTE_TEMPORARY As Long = &H100
Public Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10
Public Const FILE_ATTRIBUTE_COMPRESSED As Long = &H800

'============
' FILETIME 構造体
'============
Type FILETIME
   dwLowDateTime As Long
   dwHighDateTime As Long
End Type

'==================
' WIN32_FIND_DATA 構造体
'==================
Public Const MAX_PATH = 260
Type WIN32_FIND_DATA
   dwFileAttributes As Long
   ftCreationTime As FILETIME
   ftLastAccessTime As FILETIME
   ftLastWriteTime As FILETIME
   nFileSizeHigh As Long
   nFileSizeLow As Long
   dwReserved0 As Long
   dwReserved1 As Long
   cFileName As String * MAX_PATH
   cAlternate As String * 14
End Type

'========================
' インターネットハンドルを取得します。
'========================
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 HINTERNET As Long, ByVal lpszServerName As String, ByVal nServerPort As Integer, _
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 InternetCloseHandle Lib "WININET.DLL" _
(ByVal HINTERNET As Long) As Integer

'============================
' サーバのカレントディレクトリを取得します。
'============================
Public Declare Function FtpGetCurrentDirectory Lib "WININET.DLL" Alias "FtpGetCurrentDirectoryA" _
(ByVal hConnect As Long, ByVal lpszCurrentDirectory As String, _
ByRef lpdwCurrentDirectory As Long) As Boolean

'============================
' サーバのカレントディレクトリを設定します。
'============================
Public Declare Function FtpSetCurrentDirectory Lib "WININET.DLL" Alias "FtpSetCurrentDirectoryA" _
(ByVal hConnect As Long, ByVal lpszDirectory As String) As Long

'=====================
' サーバからファイルを取得します。
'=====================
Public Declare Function FtpGetFile Lib "WININET.DLL" Alias "FtpGetFileA" _
(ByVal hConnect As Long, ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Long

'===================
' サーバへファイルを転送します。
'===================
Public Declare Function FtpPutFile Lib "WININET.DLL" Alias "FtpPutFileA" _
(ByVal hConnect As Long, ByVal lpszLocalFile As String, _
ByVal lpszNewRemoteFile As String, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Long

'====================
' サーバのファイルを削除します。
'====================
Public Declare Function FtpDeleteFile Lib "WININET.DLL" Alias "FtpDeleteFileA" _
(ByVal hConnect As Long, ByVal lpszFileName As String) As Long

'=====================
' サーバのファイル名を変更します。
'=====================
Public Declare Function FtpRenameFile Lib "WININET.DLL" Alias "FtpRenameFileA" _
(ByVal hConnect As Long, ByVal lpszExisting As String, ByVal lpszNew As String) As Long

'======================
' サーバのディレクトリを削除します。
'======================
Public Declare Function FtpRemoveDirectory Lib "WININET.DLL" Alias "FtpRemoveDirectoryA" _
(ByVal hConnect As Long, ByVal lpszDirectory As String) As Long

'========================
' 指定されたディレクトリを検索します。
'========================
Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _
(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, _
lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long

'========================
' 引き続き、ディレクトリを検索します。
'========================
Public Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" _
(ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long


● テキストファイルをダウンロードするサンプル プログラム

'===========================
' FTPでテキストファイルをダウンロードする
'===========================
Private Sub Sample()
    Dim hOpen As Long         'インターネットサービスのハンドル
    Dim hConnection As Long 'インターネットセッションのハンドル
    Dim result As Long
    hOpen = 0
    hConnection = 0

    'インターネットサービスのハンドル取得 - hOpen
    hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
    If (hOpen <> 0) Then 'ハンドル取得成功

        'インターネットセッションのハンドル取得(FTPサーバへ接続) - hConnection
        hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
            "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
        If (hConnection <> 0) Then '接続成功

            'FTPサーバのカレントディレクトリを変更
            result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")
            If (result <> 0) Then 'ディレクトリ変更成功

                'ファイルをダウンロード
                result = FtpGetFile(hConnection, "sample.txt", "c:¥test¥sample.txt", False, _
                  FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII Or INTERNET_FLAG_RELOAD, 0)

                If (result = 0) Then 'ダウンロード失敗
                    MsgBox "ファイルの取得に失敗しました。" & Err.LastDllError
                End If
            Else
                MsgBox "ディレクトリの移動に失敗しました。" & Err.LastDllError
            End If
        Else
            MsgBox "FTPサーバへ接続できませんでした。" & Err.LastDllError
        End If
    Else
        MsgBox "FTPサーバへ接続できませんでした。" & Err.LastDllError
    End If

    'インターネットセッションを閉じる
    If (hConnection <> 0) Then InternetCloseHandle hConnection

    'インターネットサービスを閉じる
    If (hOpen <> 0) Then InternetCloseHandle hOpen

End Sub


● テキストファイルをアップロードするサンプル プログラム

'===========================
' FTPでテキストファイルをアップロードする
'===========================
Private Sub Sample()
  Dim hOpen As Long         'インターネットサービスのハンドル
  Dim hConnection As Long 'インターネットセッションのハンドル
  Dim result As Long
  hOpen = 0
  hConnection = 0

  'インターネットサービスのハンドル取得 - hOpen
  hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
  If (hOpen <> 0) Then 'ハンドル取得成功

    'インターネットセッションのハンドル取得(FTPサーバへ接続) - hConnection
    hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
        "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
    If (hConnection <> 0) Then '接続成功

      'FTPサーバのカレントディレクトリを変更
      result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")
      If (result <> 0) Then 'ディレクトリ変更成功

        'ファイルをアップロード
        result = FtpPutFile(hConnection, "c:¥test¥sample.txt", "sample.txt", FTP_TRANSFER_TYPE_ASCII, 0)

        If (result = 0) Then 'アップロード失敗
          MsgBox "ファイルの取得に失敗しました。" & Err.LastDllError
        End If
      Else
        MsgBox "ディレクトリの移動に失敗しました。" & Err.LastDllError
      End If
    Else
      MsgBox "FTPサーバへ接続できませんでした。" & Err.LastDllError
    End If
  Else
    MsgBox "FTPサーバへ接続できませんでした。" & Err.LastDllError
  End If

  'インターネットセッションを閉じる
  If (hConnection <> 0) Then InternetCloseHandle hConnection

  'インターネットサービスを閉じる
  If (hOpen <> 0) Then InternetCloseHandle hOpen

End Sub


● 指定ディレクトリのファイル一覧を取得するサンプル プログラム

'===============================
' FTPで指定ディレクトリのファイル一覧を取得する
'===============================
Private Sub Sample()
  Dim hOpen As Long         'インターネットサービスのハンドル
  Dim hConnection As Long 'インターネットセッションのハンドル
  Dim result As Long
  hOpen = 0
  hConnection = 0

  Dim hFind As Long
  Dim w32FindData As WIN32_FIND_DATA
  Dim strFile As String

  Dim FileList() As string 'ファイル名一覧
  Dim cnt As Long
  cnt = -1

  'インターネットサービスのハンドル取得 - hOpen
  hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
  If (hOpen <> 0) Then 'ハンドル取得成功

    'インターネットセッションのハンドル取得(FTPサーバへ接続) - hConnection
    hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
        "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
    If (hConnection <> 0) Then '接続成功

      'FTPサーバのカレントディレクトリを変更
      result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")
      If (result <> 0) Then 'ディレクトリ変更成功

        'ファイルリストを取得
        hFind = FtpFindFirstFile(hConnection, "*.*", w32FindData, INTERNET_FLAG_RELOAD, 0)
        If (hFind = 0) Then
          MsgBox "ファイル名を取得できませんでした。" & Err.LastDllError
        Else
          Do
            strFile = Left(w32FindData.cFileName, InStr(w32FindData.cFileName, vbNullChar) - 1)
            strFile = Mid(strFile, InStrRev(strFile, " ") + 1) 'ファイル名にゴミが付く場合は、排除。
            If ((w32FindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = &H10) Then
              strFile = strFile & "/" 'ディレクトリなら "/" を付ける
            End If
            cnt = cnt + 1
            ReDim Preserve FileList(cnt)
            FileList(cnt) = strFile 'ファイル名(ディレクトリ名)をファイル名リストに追加
            Debug.Print strFile 'Debug
          Loop Until InternetFindNextFile(hFind, w32FindData) = 0 '次のファイル名を取得
        End If

      Else
        MsgBox "ディレクトリの移動に失敗しました。" & Err.LastDllError
      End If
    Else
      MsgBox "FTPサーバへ接続できませんでした。" & Err.LastDllError
    End If
  Else
    MsgBox "FTPサーバへ接続できませんでした。" & Err.LastDllError
  End If

  'インターネットセッションを閉じる
  If (hConnection <> 0) Then InternetCloseHandle hConnection

  'インターネットサービスを閉じる
  If (hOpen <> 0) Then InternetCloseHandle hOpen

End Sub


● InternetOpen
【機能】インターネットサービスをオープンして、インターネットハンドルを返します。
【宣言】 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

lpszAgentアプリケーションの名前を指定します。この名前が、HTTPプロトコルのユーザーエージェントとして使われます。
dwAccessType接続方法。以下のパラメータのいずれかを指定します。
dwAccessType説明
INTERNET_OPEN_TYPE_DIRECT全てのホスト名をローカルで解決する。
INTERNET_OPEN_TYPE_PRECONFIG既存の設定を利用する。
INTERNET_OPEN_TYPE_PROXYプロキシサーバ経由で接続する。

lpszProxyNameプロクシサーバ名。(INTERNET_OPEN_TYPE_PROXY 指定時)
lpszProxyBypassローカルでの既知のホスト名またはIPアドレスのリスト。これらのホストに対する要求はプロクシを通さずに行われる。このリストにはワイルドカードを含めることができる。
dwFlagsオプション。以下のパラメータの組み合わせを指定します。
dwFlags説明
INTERNET_FLAG_ASYNCサーバーから取得する(非同期)。
INTERNET_FLAG_FROM_CACHEキャッシュから取得する。
INTERNET_FLAG_OFFLINEINTERNET_FLAG_FROM_CACHEと同じ。

【 例 】 Dim hOpen As Long
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
If (hOpen = 0) Then 'オープン失敗
  MsgBox Err.LastDllError
End If
InternetCloseHandle hOpen

  ※ 失敗した場合は、NULLが返ります。


● InternetConnect
【機能】サーバ(FTP, Gopher, HTTP)へ接続して、インターネットセッションのハンドルを返します。
【宣言】 Public Declare Function InternetConnect Lib "Wininet.DLL" Alias "InternetConnectA" _
(ByVal hInternet As Long, ByVal lpszServerName As String, ByVal nServerPort As Integer, _
ByVal lpszUsername As String, ByVal lpszPassword As String, ByVal dwService As Long, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Long

hInternetインターネットハンドル(InternetOpenの戻り値)を指定します。
lpszServerNameサーバのURLを指定します。
nServerPortポート番号を指定します。
nServerPort説明
INTERNET_DEFAULT_FTP_PORTFTP (port 21)
INTERNET_DEFAULT_GOPHER_PORTGopher (port 70)
INTERNET_DEFAULT_HTTP_PORTHTTP (port 80)
INTERNET_DEFAULT_HTTPS_PORTHTTPS (port 443)
INTERNET_DEFAULT_SOCKS_PORTSOCKS (port 1080)
INTERNET_INVALID_PORT_NUMBERdwServiceに指定されたデフォルトポート

lpszUsernameユーザ名を指定します。
lpszPasswordパスワードを指定します。
dwServiceアクセスするサービスの種類を指定します。
dwService説明
INTERNET_SERVICE_FTPFTP
INTERNET_SERVICE_GOPHERGopher
INTERNET_SERVICE_HTTPHTTP

dwFlagsdwServiceにINTERNET_SERVICE_FTPを指定した場合、以下のオプションが指定できます。
dwFlags説明
INTERNET_FLAG_PASSIVEパッシブモードで接続する。

dwContextコールバック関数に渡されるアプリケーション定義の値。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
If (hConnection = 0) Then '接続失敗
  MsgBox Err.LastDllError
End If
InternetCloseHandle hConnection
InternetCloseHandle hOpen


● InternetCloseHandle
【機能】インターネットハンドルをクローズします。失敗すると、0が返ります。
【宣言】 Public Declare Function InternetCloseHandle Lib "Wininet.DLL" _
(ByVal hInternet As Long) As Integer

hInternetインターネットハンドルを指定します。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Integer
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)

If (hConnection <> 0) Then
  result = InternetCloseHandle(hConnection)
  If (result = 0) Then 'クローズ失敗
    MsgBox Err.LastDllError
  End If
End If

If (hOpen <> 0) Then
  result = InternetCloseHandle(hOpen)
  If (result = 0) Then 'クローズ失敗
    MsgBox Err.LastDllError
  End If
End If


● FtpGetCurrentDirectory
【機能】FTPサーバのカレントディレクトリを取得します。取得が失敗すると、0が返ります。
【宣言】 Public Declare Function FtpGetCurrentDirectory Lib "WinInet.DLL" Alias "FtpGetCurrentDirectoryA" _
(ByVal hConnect As Long, ByVal lpszCurrentDirectory As String, _
ByRef lpdwCurrentDirectory As Long) As Long

hConnectFTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszCurrentDirectoryカレントディレクトリがセットされます。
lpdwCurrentDirectorylpszCurrentDirectoryのサイズをセットします。また、カレントディレクトリの文字数がセットされます。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Long
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)

Dim lpszDir As String             'カレントディレクトリ バッファ
Dim lpdwDir As Long              'lpszDirのバッファサイズ/文字数
lpdwDir = 256                       'バッファサイズを256とする
lpszDir = String(lpdwDir, Chr(0)) 'バッファ領域の確保
result = FtpGetCurrentDirectory(hConnection, lpszDir, lpdwDir)
If (result <> 0) Then
  lpszDir = Left(lpszDir, InStr(lpszDir, Chr(0)) - 1) 'NULLの除去
Else
  Debug.Print Err.LastDllError
End If

If (hConnection <> 0) Then InternetCloseHandle hConnection
If (hOpen <> 0) Then InternetCloseHandle hOpen


● FtpSetCurrentDirectory
【機能】FTPサーバのカレントディレクトリを変更します。変更が失敗すると、0が返ります。
【宣言】 Public Declare Function FtpSetCurrentDirectory Lib "WinInet.DLL" Alias "FtpSetCurrentDirectoryA" _
(ByVal hConnect As Long, ByVal lpszDirectory As String) As Long

hConnectFTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszDirectory変更するディレクトリを指定します。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Long
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)

result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")
If (result = 0) Then Debug.Print Err.LastDllError '変更失敗

If (hConnection <> 0) Then InternetCloseHandle hConnection
If (hOpen <> 0) Then InternetCloseHandle hOpen


● FtpGetFile
【機能】FTPサーバからファイルを取得します。失敗すると、0が返ります。
【宣言】 Public Declare Function FtpGetFile Lib "WinInet.DLL" Alias "FtpGetFileA" _
(ByVal hConnect As Long, ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Long

hConnectFTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszRemoteFile転送元(サーバ側)のファイル名。
lpszNewFile転送先(ローカル側)のファイル名。
fFailIfExists転送先(ローカル側)にすでにファイルがある場合にエラーにするかどうか。
True : 既にファイルが存在すれば、エラーとする。
False :既にファイルがあれば、上書きする。
dwFlagsAndAttributes転送先(ローカル側)のファイルの属性を指定。
dwFlagsAndAttributes説明
FILE_ATTRIBUTE_ARCHIVEアーカイブ属性。アプリケーションは、バックアップや修復のためにファイルをマークするのにこの属性を用います。
FILE_ATTRIBUTE_ENCRYPTED暗号化属性。この属性を持つファイルはデータが暗号化されていることを示します。この属性を持つディレクトリは、このディレクトリの中に新しく作成されるファイルやサブディレクトリがデフォルトで暗号化属性を持つことを示します。FILE_ATTRIBUTE_SYSTEMフラグがともに指定されている場合は、このフラグは無効になります。
FILE_ATTRIBUTE_HIDDEN隠しファイル属性。通常のディレクトリリスト出力には含まれないようになります。
FILE_ATTRIBUTE_NORMALほかのどの属性も設定されていません。この属性フラグが単独で指定された場合のみ有効です。
FILE_ATTRIBUTE_OFFLINEファイルのデータが直接に利用できるものではないことを示します。この属性は、ファイルデータがオフラインストレージへ物理的に移動されたものであることを示します。この属性はリモートストレージ(階層ストレージ管理ソフトウェア)によって利用されます。アプリケーションはこの属性を変更するべきではありません。
FILE_ATTRIBUTE_READONLY読み取り専用属性。アプリケーションは、この属性を持つファイルを読み込むことができますが、書き込んだり削除したりすることはできません。この属性を持つディレクトリを削除することはできません。
FILE_ATTRIBUTE_SYSTEMシステム属性。オペレーティングシステムの一部もしくはオペレーティングシステムにより使用されるファイルです。
FILE_ATTRIBUTE_TEMPORARY一時ストレージ(一時記憶領域として利用されている領域)として使用されることを指定します。多くのアプリケーションはファイルハンドルをクローズした後すぐに一時ファイルを削除するので、キャッシュメモリが利用可能な場合は、キャッシュを利用します。

dwFlagsファイルの取得方法を指定するフラグ。
dwFlags説明
FTP_TRANSFER_TYPE_ASCIIASCIIファイルを転送します。
FTP_TRANSFER_TYPE_BINARYバイナリファイルを転送します。
FTP_TRANSFER_TYPE_UNKNOWNデフォルトの転送方法を使用します(バイナリ転送)。
INTERNET_FLAGS_TRANSFER_ASCIIFTP_TRANSFER_TYPE_ASCIIと同じ。
INTERNET_FLAGS_TRANSFER_BINARYFTP_TRANSFER_TYPE_BINARYと同じ。

以下を組み合わせて指定します。
dwFlags説明
INTERNET_FLAG_HYPERLINK再読み込みすべきかどうかの判断時に有効期限・最終更新時刻がサーバから返されない場合強制的に再読み込みします。
INTERNET_FLAG_NEED_FILEファイルがキャッシュできない場合に一時ファイルを作成します。
INTERNET_FLAG_RELOAD要求したファイル、オブジェクト、ディレクトリリストをキャッシュから取得するのでなく、強制的にサーバから再読み込みします。
INTERNET_FLAG_RESYNCHRONIZEFTPリソースをサーバから再読み込みします。

dwContextコールバック関数へ渡す32bit値。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Long
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")

result = FtpGetFile(hConnection, "sample.txt", "c:¥test¥sample.txt", False, _
                    FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII Or INTERNET_FLAG_RELOAD, 0)
If (result = 0) Then Debug.Print Err.LastDllError

If (hConnection <> 0) Then InternetCloseHandle hConnection
If (hOpen <> 0) Then InternetCloseHandle hOpen


● FtpPutFile
【機能】FTPサーバへファイルを転送します。失敗すると、0が返ります。
【宣言】 Public Declare Function FtpPutFile Lib "WinInet.DLL" Alias "FtpPutFileA" _
(ByVal hConnect As Long, ByVal lpszLocalFile As String, _
ByVal lpszNewRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

hConnectFTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszLocalFile転送元(ローカル側)のファイル名。
lpszNewRemoteFile転送先(サーバ側)のファイル名。
dwFlagsファイルの取得方法を指定するフラグ。
dwFlags説明
FTP_TRANSFER_TYPE_ASCIIASCIIファイルを転送します。
FTP_TRANSFER_TYPE_BINARYバイナリファイルを転送します。
FTP_TRANSFER_TYPE_UNKNOWNデフォルトの転送方法を使用します(バイナリ転送)。
INTERNET_FLAGS_TRANSFER_ASCIIFTP_TRANSFER_TYPE_ASCIIと同じ。
INTERNET_FLAGS_TRANSFER_BINARYFTP_TRANSFER_TYPE_BINARYと同じ。

以下を組み合わせて指定します。
dwFlags説明
INTERNET_FLAG_HYPERLINK再読み込みすべきかどうかの判断時に有効期限・最終更新時刻がサーバから返されない場合強制的に再読み込みします。
INTERNET_FLAG_NEED_FILEファイルがキャッシュできない場合に一時ファイルを作成します。
INTERNET_FLAG_RELOAD要求したファイル、オブジェクト、ディレクトリリストをキャッシュから取得するのでなく、強制的にサーバから再読み込みします。
INTERNET_FLAG_RESYNCHRONIZEFTPリソースをサーバから再読み込みします。

dwContextコールバック関数へ渡す32bit値。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Long
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")

result = FtpPutFile(hConnection, "c:¥test¥sample.txt", "sample.txt", FTP_TRANSFER_TYPE_ASCII, 0)
If (result = 0) Then Debug.Print Err.LastDllError

If (hConnection <> 0) Then InternetCloseHandle hConnection
If (hOpen <> 0) Then InternetCloseHandle hOpen

  ※ 転送先に既に同じファイル名が存在した場合は、上書きされます。
  ※ 転送元のファイルが存在しなければ、エラーになります。


● FtpDeleteFile
【機能】FTPサーバのファイルを削除します。失敗すると、0が返ります。
【宣言】 Public Declare Function FtpDeleteFile Lib "WININET.DLL" Alias "FtpDeleteFileA" _
(ByVal hConnect As Long, ByVal lpszFileName As String) As Long

hConnectFTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszFileName削除するファイル名。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Long
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")

result = FtpDeleteFile(hConnection, "sample.txt")
If (result = 0) Then Debug.Print Err.LastDllError

If (hConnection <> 0) Then InternetCloseHandle hConnection
If (hOpen <> 0) Then InternetCloseHandle hOpen


● FtpRenameFile
【機能】FTPサーバのファイル名を変更します。失敗すると、0が返ります。
【宣言】 Public Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" _
(ByVal hConnect As Long, ByVal lpszExisting As String, ByVal lpszNew As String) As Long

hConnectFTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszExisting変更前のファイル名。
lpszNew変更後のファイル名。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Long
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")

result = FtpRenameFile(hConnection, "sample.txt", "sample.bak")
If (result = 0) Then Debug.Print Err.LastDllError

If (hConnection <> 0) Then InternetCloseHandle hConnection
If (hOpen <> 0) Then InternetCloseHandle hOpen


● FtpRemoveDirectory
【機能】FTPサーバのディレクトリを削除します。失敗すると、0が返ります。
【宣言】 Public Declare Function FtpRemoveDirectory Lib "WININET.DLL" Alias "FtpRemoveDirectoryA" _
(ByVal hConnect As Long, ByVal lpszDirectory As String) As Long

hConnectFTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszDirectory削除するディレクトリ名。
【 例 】 Dim hOpen As Long
Dim hConnection As Long
Dim result As Long
hOpen = 0
hConnection = 0
hOpen = InternetOpen("FTPSample", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, "HogeSvr", INTERNET_INVALID_PORT_NUMBER, _
                    "HogeUsr", "HogePwd", INTERNET_SERVICE_FTP, 0, 0)
result = FtpSetCurrentDirectory(hConnection, "/export/home/tatsuya")

result = FtpRemoveDirectory(hConnection, "test")
If (result = 0) Then Debug.Print Err.LastDllError

If (hConnection <> 0) Then InternetCloseHandle hConnection
If (hOpen <> 0) Then InternetCloseHandle hOpen

  ※ 削除するディレクトリが空でなければ、エラーになります。


● 標準モジュール (エラー定数)
' Constants - The WinINet functions return error codes.
Public Const INTERNET_ERROR_BASE = 12000 Public Const ERROR_INTERNET_OUT_OF_HANDLES = 12001 'インターネット ハンドルはこれ以上割り当てられません Public Const ERROR_INTERNET_TIMEOUT = 12002 '処理がタイムアウトになりました Public Const ERROR_INTERNET_EXTENDED_ERROR = 12003 'サーバーが拡張情報を返しました Public Const ERROR_INTERNET_INTERNAL_ERROR = 12004 'Microsoft Internet Extension で内部エラーが発生しました Public Const ERROR_INTERNET_INVALID_URL = 12005 'この URL は無効です Public Const ERROR_INTERNET_UNRECOGNIZED_SCHEME = 12006 'URL は認識されているプロトコルを使用していません Public Const ERROR_INTERNET_NAME_NOT_RESOLVED = 12007 'サーバー名またはアドレスは解決されませんでした Public Const ERROR_INTERNET_PROTOCOL_NOT_FOUND = 12008 '必要な機能を持ったプロトコルが見つかりませんでした Public Const ERROR_INTERNET_INVALID_OPTION = 12009 'オプションは無効です Public Const ERROR_INTERNET_BAD_OPTION_LENGTH = 12010 'このオプションの種類に対する長さが正しくありません Public Const ERROR_INTERNET_OPTION_NOT_SETTABLE = 12011 'オプションの値を設定できません Public Const ERROR_INTERNET_SHUTDOWN = 12012 'Microsoft Internet Extension サポートは終了しました Public Const ERROR_INTERNET_INCORRECT_USER_NAME = 12013 'ユーザー名が正しくありません Public Const ERROR_INTERNET_INCORRECT_PASSWORD = 12014 'パスワードが正しくありません Public Const ERROR_INTERNET_LOGIN_FAILURE = 12015 'ログイン要求は拒否されました Public Const ERROR_INTERNET_INVALID_OPERATION = 12016 ' Public Const ERROR_INTERNET_OPERATION_CANCELLED = 12017 '処理は取り消されました Public Const ERROR_INTERNET_INCORRECT_HANDLE_TYPE = 12018 '要求された処理に対して、指定したハンドルの種類が正しくありません。 Public Const ERROR_INTERNET_INCORRECT_HANDLE_STATE = 12019 '要求された処理に対して、ハンドルは状態が正しくありません。 Public Const ERROR_INTERNET_NOT_PROXY_REQUEST = 12020 'プロキシ セッションでは要求はできません Public Const ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND = 12021 'レジストリの値は見つかりませんでした Public Const ERROR_INTERNET_BAD_REGISTRY_PARAMETER = 12022 'レジストリのパラメータが正しくありません Public Const ERROR_INTERNET_NO_DIRECT_ACCESS = 12023 'インターネットに直接にはアクセスできません Public Const ERROR_INTERNET_NO_CONTEXT = 12024 'コンテキストの値がありません Public Const ERROR_INTERNET_NO_CALLBACK = 12025 'ステータス コールバックがありませんでした Public Const ERROR_INTERNET_REQUEST_PENDING = 12026 '未解決の要求があります Public Const ERROR_INTERNET_INCORRECT_FORMAT = 12027 '情報の形式が正しくありません Public Const ERROR_INTERNET_ITEM_NOT_FOUND = 12028 '要求された項目は見つかりませんでした Public Const ERROR_INTERNET_CANNOT_CONNECT = 12029 'サーバーに接続できませんでした Public Const ERROR_INTERNET_CONNECTION_ABORTED = 12030 'サーバーへの接続は異常に終了しました Public Const ERROR_INTERNET_CONNECTION_RESET = 12031 'サーバーとの接続がリセットされました。 Public Const ERROR_INTERNET_FORCE_RETRY = 12032 'そのアクションを再試行してください Public Const ERROR_INTERNET_INVALID_PROXY_REQUEST = 12033 'そのプロキシ要求は無効です Public Const ERROR_INTERNET_NEED_UI = 12034 '処理を完了するには、ユーザーの操作が必要です Public Const ERROR_INTERNET_HANDLE_EXISTS = 12036 'そのハンドルは既に存在します Public Const ERROR_INTERNET_SEC_CERT_DATE_INVALID = 12037 '証明書の日付は無効か有効期限が切れています Public Const ERROR_INTERNET_SEC_CERT_CN_INVALID = 12038 '証明書のホスト名は無効か一致しません Public Const ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR = 12039 'リダイレクトの要求により、セキュリティで保護されていない接続から保護された接続へ変更されます Public Const ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR = 12040 'リダイレクトの要求により、セキュリティで保護された接続から保護されていない接続へ変更されます Public Const ERROR_INTERNET_MIXED_SECURITY = 12041 'セキュリティで保護された接続と保護されていない接続 Public Const ERROR_INTERNET_CHG_POST_IS_NON_SECURE = 12042 'セキュリティで保護されていない投稿へ変更中 Public Const ERROR_INTERNET_POST_IS_NON_SECURE = 12043 'セキュリティで保護されていない接続でデータが投稿されています Public Const ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED = 12044 'クライアント認証を完了するには、証明書が必要です Public Const ERROR_INTERNET_INVALID_CA = 12045 'この証明機関は、無効か正しくありません Public Const ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP = 12046 'クライアント認証は正しくインストールされていません Public Const ERROR_INTERNET_ASYNC_THREAD_FAILED = 12047 'Wininet の非同期スレッドでエラーが発生しました。再起動が必要な可能性があります Public Const ERROR_INTERNET_REDIRECT_SCHEME_CHANGE = 12048 'リダイレクト処理中に、プロトコル設定が変更されました Public Const ERROR_INTERNET_DIALOG_PENDING = 12049 '再試行待ちの操作があります Public Const ERROR_INTERNET_RETRY_DIALOG = 12050 'その操作は再試行されなければなりません Public Const ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR = 12052 'セキュリティ ゾーンのチェックによると、その操作は再試行されなければなりません Public Const ERROR_INTERNET_INSERT_CDROM = 12053 ' '// '// FTP API errors '// Public Const ERROR_FTP_TRANSFER_IN_PROGRESS = 12110 'このセッションで FTP 要求は既に進行中です Public Const ERROR_FTP_DROPPED = 12111 'FTP セッションは終了しました Public Const ERROR_FTP_NO_PASSIVE_MODE = 12112 'FTP 受信モードは利用できません '// '// gopher API errors '// Public Const ERROR_GOPHER_PROTOCOL_ERROR = 12130 'gopher プロトコル エラーが発生しました Public Const ERROR_GOPHER_NOT_FILE = 12131 'ファイル用のロケータにしてください Public Const ERROR_GOPHER_DATA_ERROR = 12132 'データを解析中にエラーが検出されました Public Const ERROR_GOPHER_END_OF_DATA = 12133 'データはこれ以上ありません Public Const ERROR_GOPHER_INVALID_LOCATOR = 12134 'ロケータは無効です Public Const ERROR_GOPHER_INCORRECT_LOCATOR_TYPE = 12135 'ロケータの種類はこの処理には正しくありません Public Const ERROR_GOPHER_NOT_GOPHER_PLUS = 12136 'gopher+ の項目に対して要求してください Public Const ERROR_GOPHER_ATTRIBUTE_NOT_FOUND = 12137 '要求された属性は見つかりませんでした Public Const ERROR_GOPHER_UNKNOWN_LOCATOR = 12138 'ロケータの種類は認識されません '// '// HTTP API errors '// Public Const ERROR_HTTP_HEADER_NOT_FOUND = 12150 '要求されたヘッダーは見つかりませんでした Public Const ERROR_HTTP_DOWNLEVEL_SERVER = 12151 'サーバーは要求されたプロトコルのレベルをサポートしていません Public Const ERROR_HTTP_INVALID_SERVER_RESPONSE = 12152 '無効または認識されない応答をサーバーが返しました Public Const ERROR_HTTP_INVALID_HEADER = 12153 '提供された HTTP ヘッダーは無効です Public Const ERROR_HTTP_INVALID_QUERY_REQUEST = 12154 'HTTP ヘッダーへの要求は無効です Public Const ERROR_HTTP_HEADER_ALREADY_EXISTS = 12155 'HTTP ヘッダーは既に存在します Public Const ERROR_HTTP_REDIRECT_FAILED = 12156 'HTTP のリダイレクト要求は失敗しました Public Const ERROR_HTTP_NOT_REDIRECTED = 12160 'HTTP 要求はリダイレクトされませんでした Public Const ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION = 12161 'サーバーからの Cookie は、ユーザーによって確認されなければなりません Public Const ERROR_HTTP_COOKIE_DECLINED = 12162 'サーバーからの Cookie は、受諾を拒否されました Public Const ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION = 12168 'HTTP のリダイレクト要求は、ユーザーにより確認されなければなりません '// '// additional Internet API error codes '// Public Const ERROR_INTERNET_SECURITY_CHANNEL_ERROR = 12157 'セキュリティで保護されたチャンネル サポートでエラーが発生しました Public Const ERROR_INTERNET_UNABLE_TO_CACHE_FILE = 12158 'ファイルをキャッシュに書き込めませんでした Public Const ERROR_INTERNET_TCPIP_NOT_INSTALLED = 12159 'TCP/IP プロトコルは正しくインストールされていません Public Const ERROR_INTERNET_DISCONNECTED = 12163 'このコンピュータは、ネットワークから切断されています Public Const ERROR_INTERNET_SERVER_UNREACHABLE = 12164 'サーバーに到達できません Public Const ERROR_INTERNET_PROXY_SERVER_UNREACHABLE = 12165 'プロキシ サーバーに到達できません Public Const ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT = 12166 'プロキシの自動構成スクリプトにエラーがあります Public Const ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT = 12167 'プロキシの自動構成スクリプト ファイルをダウンロードできませんでした Public Const ERROR_INTERNET_SEC_INVALID_CERT = 12169 '提供された証明書は無効です Public Const ERROR_INTERNET_SEC_CERT_REVOKED = 12170 '提供された証明書は無効にされています '// InternetAutodial specific errors Public Const ERROR_INTERNET_FAILED_DUETOSECURITYCHECK = 12171 'ダイヤルアップに失敗しました。ファイル共有を使用し、 'セキュリティの確認が必要な場合にエラーになるように設定しています Public Const INTERNET_ERROR_LAST = ERROR_INTERNET_FAILED_DUETOSECURITYCHECK