• 締切済み

VB6 FTPファイルのパーミッション変更

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

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

InternetGetLastResponseInfoでFTPレスポンスを見る http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19111&forum=7

saka_c_lus
質問者

お礼

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

saka_c_lus
質問者

補足

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」があれば成功と判断して宜しいのでしょうか? お忙しいところ申し訳ありませんが、 何卒宜しくお願いします。 長文ですいません。

関連するQ&A

  • chmodについて。パーミッションを、動的に変更したい。

    perlのchmod関数についてです。 パーミッションの数値を、パラメータによって動的に変更することができないでしょうか? chmod $permission,$filename; とする場合、あらかじめ $permission = $QUERY{'permission'}; #パラメータで渡す。 のように変数に代入しておくと、別の数値に変更されてしまいます。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ftpからでもtelnetからでもローカルのファイルのパーミッション変更が出来ません

    (こちらで質問させて頂くのが適切なの事なのか、ちょっと悩んだのですが、質問させて下さい) CMSソフトのXOOPSをセットアップしました。 セットアップ完了後にmainfile.phpのパーミッションを644に変更するようにメッセージが表示されました。 そこで変更したいのですが、 ftpからもtelnetからも変更できずに困っています。 ftpはIISを使っています。 XPPSフォルダを仮想パスに設定していたのですが、 ホームディレクトリに該当ファイルをコピーして試してみても、状況は同じでした。 IISの設定は  anonyumousを許可  フルコントロール です。 ftpはffftpから属性変更すると変更後に何もエラーが吐かれずに終わり、確認すると属性は変わっていませんでした。 ftpから quote site chmod 644 mainfile.php で変更しようとすると 500番のエラーでコマンドが理解不能だと怒られます。 OSはWindows2000SP4です。 IIS周りの設定に見落としがあるのかな~と言う気もしているのですが、思いつく事が出来ませんでした。 どなたか助けて下さい m(__)m

  • PHPを使ってのサーバ上ファイルのパーミッションの変更方法

    PHPおよびPEARを使って、FTPサーバ上のファイルのパーミッションの変更をしたいと考えています。 具体的には、 PEARを利用し、$ftp->put()でアップしたファイル($filename)を、700に属性変更したいのです。 ソース上は、 chmod($filename, 0700); と書いています。 ところが、実行すると以下のようなワーニングが出ます。 「Warning: chmod() [function.chmod]: No such file or directory in ・・・」 今度は、 $ftp->chmod($remote_folder[$i]. $filename, 0700); と書いて実行してみるとエラーは出ません。 しかし、パーミッションは変わっていませんでした。 次に、 「PEARの命令を使って実行すればいいんだ!」と考えて、 $ftp->execute(chmod($filename, 0700)); と書いて実行してみました。 結果は、最初と同じ、 「Warning: chmod() [function.chmod]: No such file or directory in ・・・」 というワーニングでした。 いったい何がいけないいんでしょうか(--; phpのマニュアルを見ると、chmodに、「この関数では、 リモートファイルを使用することはできません。」とあります。 が、教えて!gooなどで検索してみると、chmodを使って普通にサーバ上のファイルのパーミッションを変更している書き込みが見られます。 正直、混乱しているというか、よく分からない状態です。 皆様、気がついた点などありましたら、是非、アドバイスお願い致します。

    • ベストアンサー
    • PHP
  • FTPで属性が変更できません。

    OS Debian 3.1 FTP wu-ftpd 2.6.2-20 telnet上ではパーミッションを変更できるのですが、 ffftpのソフトでパーミッションを変更しようとすると 下記のエラーがでます。 サーバー側でどのような設定をすればよいでしょうか? >SITE CHMOD 755 syoukai.html 502 CHMOD command not implemented.

  • パーミッションの変更について

    rwxr-wr-w rwxr-wr-- rwxr-wr-t の内容のテキストファイルのパーミッションの変更コマンドをシェルスクリプトで書くにはどうしたらいいのかわかりません。 おしえていただくとありがたいです。 最初の一文字づつを読み込んでchmod ???と数字がでるようにしたいのですが 実行結果 ./a.txt r w x r - w r - w chmod 755と実行結果がでるようにしたいです。if文を沢山つかうのですか?

  • VB2005 から DLL を呼び出す

    VB 初心者です。 今、VB の練習ということで VB 2005 Express Edition を使って、個人用ブラウザをつくっています。Web ページの表示は Webbrowser コンポーネントを使っています。 その仕様で、閲覧先によって HTTP Proxy を変更するようになっています。(自分で決めたんですが) いろいろ調べてみると、urlmon.dll の UrlMkSetSessionOption() を呼べば自分のアプリケーション限定で Proxy を変更できるようだ、ということがわかりました。 古い VB など(VB 6 とか?)では、 Private Declare Sub UrlMkSetSessionOption Lib "urlmon.dll" _ (ByVal dwOption As Long, ByVal pBuffer As Any, _ ByVal dwBufferLength As Long, _ ByVal dwReserved As Long) このような感じで宣言するとかあったんですが、VB2005 では Any がダメだとか、 Type INTERNET_PROXY_INFO Dim dwAccessType As Long Dim lpszProxy As String Dim lpszProxyBypass As String End Type で Type はダメだとか、呼び出し側で、LenB を使おうとしたら使えないだとか、INTERNET_OPTION_PROXY の値がわからないなど、問題が山積みです。 上記 DLL を VB 2005 で使ったことがある人がいたら(またはわかる人)、使い方を教えてもらえないでしょうか?

  • VB6のAdressOfをVB.NETに変換したい

    以下のソースをVB.NETに変換したいのですが... XOpenDLL関数の AddressOfのあたりがエラーになって変換できません。 (Microsoft Visual Basic .NET 2003の変換機能) Private Declare Function XOpenDLL Lib _ "Maser.dll" _ Alias "OpenDLL" _ (ByVal nModel As Long, _ ByVal nLens As Long, _ ByVal nLensMfr As Long, _ ByVal nGSpeed As Long, _ ByVal nSocketPort As Long, _ ByVal nRS232Port As Long, _ ByVal pCallbackFn As Long) _ As Boolean Private Declare Function XSendCommand Lib _ "Maser.dll" _ Alias "SendCommandVB" _ (ByVal OpCode As Long, _ ByVal PropCode As Long, _ ByVal InputString As String, _ ByRef Output As String) _ As Integer Private Declare Sub XCloseDLL Lib _ "Maser.dll" _ Alias "CloseDLL" () Then to use these functions: ‘ Open the DLL bInstance = XOpenDLL(nModel, nLens, nLensMfr, nGSpeed, nSocketPort, nRS232Port, AddressOf MyCallbackFn) ‘ Send a command nRet = XSendCommand(nOpCode, nPropCode, szInputData, szOutput) ‘ Close the interface Call XCloseDLL お教えください。

  • API FtpPutFileの戻り値

    お世話になっております。 API FtpPutFileを使用しているのですが 確実にFalseになります。一日悩みましたが原因が わかりません。 If FtpPutFile(lngConnect, _ "***.txt", _ "***.txt", _ FTP_TRANSFER_TYPE_ASCII, _ 0&) <> False Then です。必要なものを付け加えておきます。 Private Declare Function FtpPutFile Lib "wininet.dll" _ Alias "FtpPutFileA" _ (ByVal hFtpSession As Long, _ ByRef lpszLocalFile As String, _ ByRef lpszNewRemoteFile As String, _ ByVal dwFlags As Long, _ ByVal dwContext As Long) As Long Private Const FTP_TRANSFER_TYPE_ASCII = &H1& です。環境はWinXP,VB6+SP5 よろしくお願い致します。

  • Permissionについて

    あるCGIを試用させていただいているのですが お客様から登録された情報が少したつと消えてしまうので困ってます・・。 パーミッションの記述で下記1(お借りしているCGIサイトの説明)と下記2(UPしたサーバーの説明)が違うのでどのように変更すればいいのか教えて下さい。よろしくお願いします。 あと、パーミッションの問題以外で考えられることはありますか?何卒宜しくお願いします。 --1--- ba**er_** (フォルダ)[755] -  set.cgi [755]         in.cgi [755]         send.cgi [755]         ip.dat [666]          ba**er.dat [666]          jcode.pl [644]         mimew.pl [644]   lock(フォルダ) [777] ----2---- CGIホームページご利用方法 WWWサーバについて CGIサーバ cgixx.******.or.jp には、Apache を使用しております。 Permissionについて CGIのPermission(アクセス権)については、FTPで転送された際に、604(-rw----r--)となります。FTPのchmodで、704(-rwx---r--)に変更して下さい。 また、ディレクトリに関しては、FTPで転送された際に、705(drwx---r-x)となります。ディレクトリ内にCGIを設置する場合、そのディレクトリのPermissionは、705(drwx---r-x)のままにして下さい。777(drwxrwxrwx)に変更すると、そのディレクトリ内のCGIが動作いたしませんので、ご注意下さい。 尚、本サーバにおいては、お客様のCGIは、お客様のアカウント権限で実行されます。

    • 締切済み
    • CGI
  • VB6.0で、DLLを動的に参照したい

    VB6.0では、DLLを利用する際の宣言部分で、パスを""で括った静的な記載でなく、動的な記載にできるのでしょうか。 色々と調べてみたのですが、イマイチピンとくるものがなかったので質問させていただきました。 例:Public Declare Function Ztest Lib "C:\Test1\Test2" Alias "Test3" (ByVal data1 As Long) As Long                           ↓動的に変更したい   Public Declare Function Ztest Lib "○○:\Test1\Test2" Alias "Test3" (ByVal data1 As Long) As Long