- PR -

WININET.DLLを使用したFTP転送について

1
投稿者投稿内容
ほりかず
常連さん
会議室デビュー日: 2003/01/29
投稿数: 26
投稿日時: 2005-02-17 10:16
こんにちは。
.NETとは直接関係無いかもしれませんが、
レガシーシステムからファイルをFTPにてダウンロードする機能を作成しています。

漢字を含まないファイルの場合、WININET APIのFtpGetFileを使用して、
ASCIIにて問題なくファイルをGETできます。
漢字を含むファイルの場合、QUOTE TYPEを指定して、GET出来ることを、
コマンドラインのFTPで確認し、
WININET APIのFtpCommandを使用して、実現しようとしていますが、
QUOTE TYPEを送出後のFtpGetFileに反映されません。
何か別の設定等が必要なのでしょうか?

下手な文章で申し訳ありませんが、宜しくお願いします。

※FtpCommandでのQUOTE TYPE送出が成功している事は、
発行直後にInternetGetLastResponseInfoにて確認しています。

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-17 10:48
引用:

ほりかずさんの書き込み (2005-02-17 10:16) より:
WININET APIのFtpCommandを使用して、実現しようとしていますが、
QUOTE TYPEを送出後のFtpGetFileに反映されません。


どんな風に記述していますか?FtpCommandはQUTEコマンドを送信する命令です。したがって下のようになるはずですが・・・。
FtpCommand(hConect, ..., TRUE, "TYPE ...",
可能であればFTPサーバーのログを見ると、解決が早いかと。QUOTE TYPEを発行した前後でどのような挙動をしているでしょうか?
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
ほりかず
常連さん
会議室デビュー日: 2003/01/29
投稿数: 26
投稿日時: 2005-02-17 11:38
回答ありがとうございます。

具体的には、下記のとおりFtpCommandを発行しています。

bflag = FtpCommand(lFtpHandle, False, FTP_TRANSFER_TYPE_ASCII, _
"TYPE b 1", 0, hFile)

また、FTPサーバは、ホストコンピュータで小生では見れませんが、
InternetGetLastResponseInfoで、下記のとおり、結果が返ってきてます。

>200-REPRESENTATION TYPE IS KANJI SHIFT-JIS
>200 STANDARD DBCS CONTROL USED
これは、コマンドラインのFTPにて返されるメッセージと同様でした。

ただし、その後のFtpGetFileにて
>200 REPRESENTATION TYPE IS ASCII NONPRINT
>200 PORT REQUEST OK.
>501 COMMAND ABORTED -- FTP SERVER NOT CONFIGURED FOR SIZE
>125 SENDING DATA SET ファイル名 FIXRECFM 80
>250 TRANSFER COMPLETED SUCCESSFULLY.
200〜501の行がコマンドラインのFTPとは異なるようです。

lResultCode = FtpGetFile(lFtpHandle, _
bySav_GetFileName(0), bySav_PutFileName(0), _
1, FILE_ATTRIBUTE_NORMAL, _
FTP_TRANSFER_TYPE_ASCII + INTERNET_FLAG_RELOAD, 0)

これが原因でしょうか?


[ メッセージ編集済み 編集者: ほりかず 編集日時 2005-02-17 13:29 ]
1

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