FTP wininet


ごろり  2008-11-09 11:37:58  No: 140804  IP: 192.*.*.*

'インターネットサービスのハンドル取得 - 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は返ってきません。
間違っている箇所を教えて頂ければとおもいます。

編集 削除
とおり  2008-11-10 11:54:02  No: 140805  IP: 192.*.*.*

気がついたところ
>"C:\\tmp/hoge.log.gz"
"C:\tmp/hoge.log.gz"
かな

編集 削除
ごろり  2008-11-10 19:32:32  No: 140806  IP: 192.*.*.*

とおりさん

パス名はいろいろ変えてみました。
"C:\tmp/hoge.log.gz"でやってもましたが、結果は同じでした。
わからないのは
>"C:\\tmp/hoge.log.gz"
間違っているのであれば、なぜエラーにならないのでしょうか?
存在しないファイル名などを入れてみたのですが、エラーは出ずロジックがそのまま流れ、最後にはファイルがゲットできていないのです。

よろしくお願いいたします。

編集 削除
魔界の仮面弁士  2008-11-10 20:14:40  No: 140807  IP: 192.*.*.*

> うまくいきません。
第三者が現象を再現可能な、最低限のソースを提示できますか?
呼び出し方は正しくとも、Declare が間違っている可能性もあります。
また提示されたコードでは、少なくとも文法的に正しくないため、
検証のしようがありません。

> エラーになってないようにみえます。
Err.LastDllError プロパティの値はどうなっていますか?

> パスを適当に変更しても0は返ってきません。
API 自体は、「正常にコマンドを送出できた」ので成功を返したけれども、
サーバー側では「コマンドは受け取ったけど、パス異常で失敗」
という可能性とか。試せるソースが提供されていないので、未確認ですが。

> ファイルのダウンロード先をみてもファイルがありません。
実は XP ではなく、Vista や Windows 7 Pre-Beta などで実行していて、
データリダイレクトによって別フォルダへ格納されていた、とか…。

編集 削除
ごろり  2008-11-11 20:52:13  No: 140808  IP: 192.*.*.*

魔界の仮面弁士さん

回答ありがとうございます。

>Err.LastDllError プロパティの値はどうなっていますか?
この存在をしらず、指摘を受けソースに追加したところ

InternetConnectのErr.LastDllError プロパティの値が87でうまくいってないようです。

ネットでもこの87がなんなのか探してみたのですが、みつかりませんでした。
私の探し方がいけないのか、、、

すみませんが、ご存知でしたら教えて下さい。

編集 削除
魔界の仮面弁士  2008-11-11 21:49:27  No: 140809  IP: 192.*.*.*

> 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 の意味を検索する事ができます。

編集 削除