VB FTP操作 |
WinInet API Microsoft Win32 のインターネット関数 (WinInet) を使用すると、インターネットをアプリケーションの一部に簡単に組み入れることができます。WININET.DLL には、HTTP (Hypertext Transfer Protocol)、FTP (File Transfer Protocol)、および Gopher を使用してインターネットに簡単にアクセスするための新しい WinInet 関数が含まれています。 |
[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
|
●InternetConnect
|
●InternetCloseHandle
|
●FtpGetCurrentDirectory
|
●FtpSetCurrentDirectory
|
●FtpGetFile
|
●FtpPutFile
※ 転送先に既に同じファイル名が存在した場合は、上書きされます。 ※ 転送元のファイルが存在しなければ、エラーになります。 |
●FtpDeleteFile
|
●FtpRenameFile
|
●FtpRemoveDirectory
※ 削除するディレクトリが空でなければ、エラーになります。 |
[標準モジュール (エラー定数)] ' 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 |