目次へ戻ります
VB サンプル


VB FTP操作

WinInet API

Microsoft Win32 のインターネット関数 (WinInet) を使用すると、インターネットをアプリケーションの一部に簡単に組み入れることができます。WININET.DLL には、HTTP (Hypertext Transfer Protocol)、FTP (File Transfer Protocol)、および Gopher を使用してインターネットに簡単にアクセスするための新しい WinInet 関数が含まれています。
■標準モジュール FTP(API)用標準モジュールの記述例
■標準モジュール (エラー定数) FTP(API)用標準モジュール(エラー定数)の記述例
■サンプルリスト テキストファイルをダウンロードするサンプルリスト
■サンプルリスト テキストファイルをアップロードするサンプルリスト
●InternetOpen インターネットサービスのオープン
●InternetConnect FTPサーバへ接続
●InternetCloseHandle インターネットサービスのクローズ
●FtpGetCurrentDirectory FTPサーバのカレントディレクトリを取得
●FtpSetCurrentDirectory FTPサーバのカレントディレクトリを変更
●FtpGetFile FTPサーバからファイルを取得
●FtpPutFile FTPサーバへファイルを転送
●FtpDeleteFile FTPサーバのファイルを削除
●FtpRenameFile FTPサーバのファイル名を変更
●FtpRemoveDirectory FTPサーバのディレクトリを削除
[DLL] wininet.dll

[標準モジュール]

' 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

'=====================================
' インターネットハンドルを取得します。
'=====================================
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

【サンプルリスト】

'=========================================
' 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
●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 : 接続方法。以下のパラメータのいずれかを指定します。
INTERNET_OPEN_TYPE_DIRECT 全てのホスト名をローカルで解決する。
INTERNET_OPEN_TYPE_PRECONFIG 既存の設定を利用する。
INTERNET_OPEN_TYPE_PROXY プロキシサーバ経由で接続する。
lpszProxyName : プロクシサーバ名。(INTERNET_OPEN_TYPE_PROXY 指定時)
lpszProxyBypass : ローカルでの既知のホスト名またはIPアドレスのリスト。これらのホストに対する要求はプロクシを通さずに行われる。このリストにはワイルドカードを含めることができる。
dwFlags : オプション。以下のパラメータの組み合わせを指定します。
INTERNET_FLAG_ASYNC サーバーから取得する(非同期)。
INTERNET_FLAG_FROM_CACHE キャッシュから取得する。
INTERNET_FLAG_OFFLINE INTERNET_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 : ポート番号を指定します。
INTERNET_DEFAULT_FTP_PORT FTP (port 21)
INTERNET_DEFAULT_GOPHER_PORT Gopher (port 70)
INTERNET_DEFAULT_HTTP_PORT HTTP (port 80)
INTERNET_DEFAULT_HTTPS_PORT HTTPS (port 443)
INTERNET_DEFAULT_SOCKS_PORT SOCKS (port 1080)
INTERNET_INVALID_PORT_NUMBER dwServiceに指定されたデフォルトポート
lpszUsername : ユーザ名を指定します。
lpszPassword : パスワードを指定します。
dwService : アクセスするサービスの種類を指定します。
INTERNET_SERVICE_FTP FTP
INTERNET_SERVICE_GOPHER Gopher
INTERNET_SERVICE_HTTP HTTP
dwFlags : dwServiceにINTERNET_SERVICE_FTPを指定した場合、以下のオプションが指定できます。
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

hConnect : FTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszCurrentDirectory : カレントディレクトリがセットされます。
lpdwCurrentDirectory : lpszCurrentDirectoryのサイズをセットします。また、カレントディレクトリの文字数がセットされます。
【 例 】 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

hConnect : FTPセッションのハンドル(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

hConnect : FTPセッションのハンドル(InternetConnectの戻り値)を指定します。
lpszRemoteFile : 転送元(サーバ側)のファイル名。
lpszNewFile : 転送先(ローカル側)のファイル名。
fFailIfExists : 転送先(ローカル側)にすでにファイルがある場合にエラーにするかどうか。
True : 既にファイルが存在すれば、エラーとする。
False :既にファイルがあれば、上書きする。
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 : ファイルの取得方法を指定するフラグ。
FTP_TRANSFER_TYPE_ASCII ASCIIファイルを転送します。
FTP_TRANSFER_TYPE_BINARY バイナリファイルを転送します。
FTP_TRANSFER_TYPE_UNKNOWN デフォルトの転送方法を使用します(バイナリ転送)。
INTERNET_FLAGS_TRANSFER_ASCII FTP_TRANSFER_TYPE_ASCIIと同じ。
INTERNET_FLAGS_TRANSFER_BINARY FTP_TRANSFER_TYPE_BINARYと同じ。

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

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

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

hConnect : FTPセッションのハンドル(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
hConnect : FTPセッションのハンドル(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

hConnect : FTPセッションのハンドル(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

目次へ戻ります