- PR -

WININETでのFtpFilePutについて

1
投稿者投稿内容
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2006-02-11 15:30
VB.NETでwininet.dllを利用して,ファイル転送を行いたいと
考えています。
VB6の時に同様の開発経験があります。

ところが,FtpPutFileだけがどうしてもうまくいきません。
FtpGetFileはうまくいきます。
ずっとはまっております。

mintNetConn = InternetOpen("TEST", INTERNET_OPEN_TYPE_PRECONFIG,NullString, vbNullString, 0)
mintFtpConn = InternetConnect(mintNetConn, "Server", "21", "user", "password", INTERNET_SERVICE_FTP, 0, 0)
ret=FtpPutFile(mintFtpConn, "D:\ABCD.txt", "/ABCD.txt", 2, 0)

mintNetConn,mintFtpConnは0以外を返しますが,retが0になります。
その際のErr.LastDllErrorは18を返します。

エラー18はERROR_NO_MORE_FILESに相当するので,ローカルのファイルが認識
できないのかと思ってのですが,良く分かりません。

下記は念のため,宣言です。
<DllImport("WinInet")> _
Private Shared Function FtpPutFile(ByVal hFtpSession As Long _
, ByVal lpszLocalFile As String _
, ByVal lpszNewRemoteFile As String _
, ByVal dwFlags As Integer _
, ByVal dwContext As Integer) As Boolean
End Function

FTPサーバはWindowsサーバです。

以下は確認済みです。
・D:\ABCD.txtは存在する。ファイル属性は通常。
・ftpコマンドから同ファイルをputすることは可能。

よろしくお願いします。
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2006-02-11 15:44
自己解決です。

FtpPutFile関数の引数「hFtpSession」の型は
longではなくてintegerでした。

それを直したらうまくいきました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-11 17:16
Integer ではなく、System.IntPtr を使うべきかと。(2 箇所該当)

コード:

    <System.Runtime.InteropServices.DllImport("WinInet.DLL")> _
    Private Shared Function FtpPutFile( _
        ByVal hConnect          As System.IntPtr, _
        ByVal lpszLocalFile     As String, _
        ByVal lpszNewRemoteFile As String, _
        ByVal dwFlags           As Integer, _
        ByVal dwContext         As System.IntPtr) As Boolean
    End Function


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-02-12 01:48
ここで検索してみるとか、
時たま間違ってたり無かったりするけど

http://www.pinvoke.net/
1

スキルアップ/キャリアアップ(JOB@IT)