タイトル | : wininet.dllを使用したftpについて |
記事No | : 10202 |
投稿日 | : 2010/08/24(Tue) 10:06 |
投稿者 | : エイジ |
いつも参考にさせていただいています。エイジと申します。 以下の環境で開発しております。 言語 VB2008 Compact Framework Ver3.5 開発OS WindowsXp SP3 実行機OS WindowsMobile6.5 Professional ftpサーバのOS WindowsServer2003
Compact Framework Ver3.5にftpクラスがないためwininet.dllを使用して ftp処理をしたいと思っています。 色々なホームページを検索しましてその中にあるソースを見つけまして それを利用しようとしました。(記載のあったホームページは覚えていません) ftpの接続や、接続先でのフォルダの作成、移動、削除及びファイルの移動は 正常に処理されたのですが(ftpサーバのフォルダやファイルで確認)、ファイル のftpサーバからのダウンロード及びftpサーバへのアップロードが正常に処理 されません。Err.LastDllErrorでエラー内容を取得したところ以下のような エラーになっていました。 エラーコード:122 エラー内容:200 Type set to I. 500 Invalid PORT Command エラーの原因や対処方法など教えて頂けないでしょうか。 よろしくお願い致します。
ソースを抜粋しまして以下に記載します。 ' API定義 Private Declare Function InternetOpen Lib "wininet.dll" Alias _ "InternetOpenW" (ByVal sAgent As String, ByVal lAccessType As Integer, _ ByVal sProxyName As String, ByVal sProxyBypass As String, _ ByVal lFlags As Integer) As Integer Private Declare Function InternetConnect Lib "wininet.dll" Alias _ "InternetConnectW" (ByVal hInternetSession As Integer, _ ByVal sServerName As String, ByVal nServerPort As Integer, _ ByVal sUsername As String, ByVal sPassword As String, _ ByVal lService As Integer, ByVal lFlags As Integer, _ ByVal lContext As Integer) As Integer Private Declare Function FtpGetFile Lib "wininet.dll" Alias _ "FtpGetFileW" (ByVal hFtpSession As Integer, ByVal lpszRemoteFile As String, _ ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, _ ByVal dwFlagsAndAttributes As Integer, ByVal dwFlags As Integer, _ ByVal dwContext As Integer) As Integer Private Declare Function FtpPutFile Lib "wininet.dll" Alias _ "FtpPutFileW" (ByVal hFtpSession As Integer, ByVal lpszLocalFile As String, _ ByVal lpszRemoteFile As String, ByVal dwFlags As Integer, _ ByVal dwContext As Integer) As Integer
Dim strServer As String 'ftpサーバ名 Dim strUser As String 'ユーザ名 Dim strPswd As String 'パスワード Dim strLocalPath As String 'ローカルファイルのフルパス Dim strRemotePath As String 'ftpサーバファイルのパス
' インターネットオープン(FTPサーバ接続準備) lngInternetOpen = InternetOpen("WININET", _ INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0) If lngInternetOpen = 0 Then MsgBox("インターネットオープン" & Err.LastDllError.ToString) Exit Function End If
' FTPサーバ接続 Dim lngPassive As Long : lngPassive = 0 If blnPassive Then lngPassive = INTERNET_FLAG_PASSIVE lngInternetConnect = InternetConnect( _ lngInternetOpen, strServer, INTERNET_INVALID_PORT_NUMBER, _ strUser, strPswd, INTERNET_SERVICE_FTP, lngPassive, 0) If lngInternetConnect = 0 Then MsgBox("FTPサーバ接続" & Err.LastDllError.ToString) Exit Function End If
' バイナリまたはアスキーモードの設定 Dim lngtype As Long lngtype = FTP_TRANSFER_TYPE_BINARY ' ファイルをFTPサーバへ送信 Dim lngRtn As Long lngRtn = FtpPutFile(lngInternetConnect, _ strLocalPath, strRemotePath, lngtype, 0) If lngRtn = 0 Then Dim errer As String Dim errlen As Integer InternetGetLastResponseInfo(Err.LastDllError, vbNullString, errlen) errer = New String(Chr(0), errlen + 1) InternetGetLastResponseInfo(Err.LastDllError, errer, errlen)
MsgBox("ファイルをFTPサーバへ送信" & Err.LastDllError.ToString & "/" & errer) Exit Function End If
|