'インターネットサービスのハンドル取得 - hOpen
hOpen = InternetOpen("FTPAccess", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
'インターネットセッションのハンドル取得(FTPサーバへ接続) - hConnection
hConnection = InternetConnect(hOpen, "0.0.0.0", INTERNET_DEFAULT_FTP_PORT, _
"user", "pwd", INTERNET_SERVICE_FTP, 0, 0)
'FTPサーバのカレントディレクトリを変更
result = FtpSetCurrentDirectory(hConnection, /tmp/log/)
'ファイルをダウンロード
result = FtpGetFile(hConnection, "hoge.log.gz", "C:\\tmp/hoge.log.gz", False, _
FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY Or INTERNET_FLAG_RELOAD, 0)
FTPでファイルをダウンロードするプログラムを作成しているのですが
うまくいきません。
wininetのAPIの戻り値は0がエラーのようなんですが、全て何らか数字が返ってきていて、エラーになってないようにみえます。
ただ、ファイルのダウンロード先をみてもファイルがありません。
パス、ファイル名は確認しました。
というか、パスを適当に変更しても0は返ってきません。
間違っている箇所を教えて頂ければとおもいます。
気がついたところ
>"C:\\tmp/hoge.log.gz"
"C:\tmp/hoge.log.gz"
かな
とおりさん
パス名はいろいろ変えてみました。
"C:\tmp/hoge.log.gz"でやってもましたが、結果は同じでした。
わからないのは
>"C:\\tmp/hoge.log.gz"
間違っているのであれば、なぜエラーにならないのでしょうか?
存在しないファイル名などを入れてみたのですが、エラーは出ずロジックがそのまま流れ、最後にはファイルがゲットできていないのです。
よろしくお願いいたします。
> うまくいきません。
第三者が現象を再現可能な、最低限のソースを提示できますか?
呼び出し方は正しくとも、Declare が間違っている可能性もあります。
また提示されたコードでは、少なくとも文法的に正しくないため、
検証のしようがありません。
> エラーになってないようにみえます。
Err.LastDllError プロパティの値はどうなっていますか?
> パスを適当に変更しても0は返ってきません。
API 自体は、「正常にコマンドを送出できた」ので成功を返したけれども、
サーバー側では「コマンドは受け取ったけど、パス異常で失敗」
という可能性とか。試せるソースが提供されていないので、未確認ですが。
> ファイルのダウンロード先をみてもファイルがありません。
実は XP ではなく、Vista や Windows 7 Pre-Beta などで実行していて、
データリダイレクトによって別フォルダへ格納されていた、とか…。
魔界の仮面弁士さん
回答ありがとうございます。
>Err.LastDllError プロパティの値はどうなっていますか?
この存在をしらず、指摘を受けソースに追加したところ
InternetConnectのErr.LastDllError プロパティの値が87でうまくいってないようです。
ネットでもこの87がなんなのか探してみたのですが、みつかりませんでした。
私の探し方がいけないのか、、、
すみませんが、ご存知でしたら教えて下さい。
> Err.LastDllError プロパティの値が87でうまくいってないようです。
意味としては、『パラメータが間違っています。』です。
定数定義としては、こんな感じ。( Error.h より)
Const ERROR_INVALID_PARAMETER As Long = 87
>ネットでもこの87がなんなのか探してみたのですが、みつかりませんでした。
Visual Studio 6.0 をフルインストールしているのであれば、スタートメニューの
プログラム
[Microsoft Visual Studio 6.0]
[Microsoft Visual Studio 6.0 ツール]
[Error Lookup]
にある ErrLook.EXE を使うことで、その 87 の意味を検索する事ができます。