プロが教えるわが家の防犯対策術!

VB6からFTPを使用してファイルを送信したのですが、
パーミッション変更の仕方が分からず困っています。

いろんなところの過去ログやらを見て、FtpCommandを使用して
quote site chmod 777 ファイル名
をやれば良さそうだというところまで解ったのですが、
何せVB6なもんでFtpCommandの使用方法まで解りませんでした。

まず下記のように定義しました。
Public Declare Function FtpCommand Lib "wininet.dll" Alias "FtpCommandA" _
(ByVal hFtpSession As Long, _
ByVal fExpectResponse As Boolean, _
ByVal dwFlags As Long, _
ByVal lpszCommand As String, _
ByVal lContext As Long, _
phFtpCommand As Long) As Boolean

その後、FtpCommandの実行はこのようにしています。
lngRtn = FtpCommand(hConnection, 1, FTP_TRANSFER_TYPE_ASCII, strCmd, 0, hResponse)

パラメータで渡すコマンド文字列を下記のようにしました。
strCmd = "quote site chmod 777 temp.txt"
この場合は戻り値が0で、パーミッションも変更されませんでした。
(あっという間にlngRtnに0が入ってきました)

そこで、QUOTEを省略してみました。
strCmd = "site chmod 777 temp.txt"
すると戻り値が0でしたが、パーミッションは変更されました。
(やたら時間が掛かりました)

しかし、戻り値が0だと正常終了なのか、エラー終了なのか判断できない気がします。

判定の仕方が間違っているとか、定義が違う、パラメータが違う等、
どなたか何かご存知であればご教授願いたいと思います。

長文ですいませんでした。

環境:WinXP, Win2008Svr R2

A 回答 (1件)

InternetGetLastResponseInfoでFTPレスポンスを見る


http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …

この回答への補足

todo36さま。
早速のレスありがとうございます。

回答に対しての確認をさせてください。

【確認1】
> InternetGetLastResponseInfoでFTPレスポンスを見る
ということはFtpCommandの戻り値は関係ないってことでしょうか?

【確認2】
とりあえずInternetGetLastResponseInfoを入れて、
FtpCommandを実行してみました。

下記の場合は
strCmd = "quote site chmod 777 temp.txt"
lRtn = FtpCommand(hConnection, 1, FTP_TRANSFER_TYPE_ASCII, sCmd, 0, hResponse)

「Error 0: 200 Type set to A
200 PORT command successful
500 QUOTE not understood」
となっていました。

コマンドプロンプトでFTP接続してHELPを見たら
ftp> help
quoteがありました。

ftp> quote help
SITEがありました。

ftp> quote site help
CHMODがありました。

全て*は付いていないので使用できるコマンドだと思います。

エラーの内容はQUOTEコマンドなんて知らないって言われているのでしょうが、
ヘルプで見ると実行できそうです。

FtpCommandからQUOTE SITE CHMODはできないのでしょうか?


【確認3】
そこで下記のようにQUOTEを外して実行したところ
strCmd = "site chmod 777 temp.txt"
lRtn = FtpCommand(hConnection, 1, FTP_TRANSFER_TYPE_ASCII, sCmd, 0, hResponse)

「Error 0: 200 Type set to A
200 PORT command successful
200 SITE CHMOD command successful」
となっていました。
ただし、下記のFtpCommandの実行は5分くらい帰ってきませんでした。

FtpCommandが成功した場合はそんなに時間がかかるのでしょうか?
「200 SITE CHMOD command successful」があれば成功と判断して宜しいのでしょうか?

お忙しいところ申し訳ありませんが、
何卒宜しくお願いします。

長文ですいません。

補足日時:2011/12/21 09:51
    • good
    • 0
この回答へのお礼

質問への回答ありがとうございました。
後は自力でやってみます。

お礼日時:2011/12/27 14:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!