FTP wininet


ごろり  2008-11-09 20:37:58  No: 140804

'インターネットサービスのハンドル取得 - 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 20:54:02  No: 140805

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


ごろり  2008-11-11 04:32:32  No: 140806

とおりさん

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

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


魔界の仮面弁士  2008-11-11 05:14:40  No: 140807

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

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

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

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


ごろり  2008-11-12 05:52:13  No: 140808

魔界の仮面弁士さん

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

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

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

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

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


魔界の仮面弁士  2008-11-12 06:49:27  No: 140809

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加