- ベストアンサー
MFCで、FTPファイルの属性変更
MFCで、FTPクライアントを作成しています。 ファイルのアップロードは出来たのですが、属性変更の仕方が分からず 困っています。 どなたか、ご教授ください。 よろしくお願いします。 環境:WinXP+VC6
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1の方が提示してらっしゃるように、CFtpConnection::Command()メソッドあるいはWin32のFtpCommand()関数を使って、コマンド文字列を直接送信するしかないと思います。 ただ、VC 6.0のMFCはCFtpConnection::Command()をサポートしていなくて、標準付属のPlatform SDKもFtpCommand()を含んでいない、とかいう話なので、VC 6.0用の最終版であるPlatform SDK Feb 2003を入手してインストールするか、下記のようにLoadLibrary()でwininet.dllから直接関数ポインタを取得して実行するか、あるいは最新版のVC++に移行するか、のいずれかだと思います。 #include <tchar.h> #include <Windows.h> #include <atlbase.h> #include <WinInet.h> BOOL FtpCommandA_DirectLoad( HINTERNET hConnect, BOOL fExpectResponse, DWORD dwFlags, LPCSTR lpszCommand, DWORD_PTR dwContext, HINTERNET* phFtpCommand ) { BOOL ret = FALSE; LPCTSTR pModuleFName = _T("Wininet.dll"); HMODULE hDll = ::LoadLibrary(pModuleFName); if (hDll) { typedef BOOL (WINAPI *TFuncPtrFtpCommandA)(HINTERNET, BOOL, DWORD, LPCSTR, DWORD_PTR, HINTERNET*); LPCSTR pFuncName = "FtpCommandA"; TFuncPtrFtpCommandA pFtpCommandA = reinterpret_cast<TFuncPtrFtpCommandA>(::GetProcAddress(hDll, pFuncName)); if(pFtpCommandA) { ret = pFtpCommandA(hConnect, fExpectResponse, dwFlags, lpszCommand, dwContext, phFtpCommand); } else { ATLTRACE("Failed to get the address of the function \'%s\'.\n", pFuncName); } ::FreeLibrary(hDll); hDll = NULL; } else { ATLTRACE(_T("Failed to load \'%s\'.\n"), pModuleFName); } return ret; } としておいて、 { CFtpConnection ftpConnection; // ここで FTP 接続処理。 BOOL ret = ::FtpCommandA_DirectLoad(ftpConnection, FALSE, FTP_TRANSFER_TYPE_BINARY, "site chmod 755 target.bin", NULL, NULL); // あるいは BOOL ret = ::FtpCommandA_DirectLoad(ftpConnection, FALSE, FTP_TRANSFER_TYPE_BINARY, "quote site chmod 755 target.bin", NULL, NULL); } のようにコールする。 http://msdn.microsoft.com/ja-jp/library/4tw7dfy6.aspx http://msdn.microsoft.com/en-us/library/aa384133.aspx http://q.hatena.ne.jp/1125986373
その他の回答 (1)
- davidfox
- ベストアンサー率58% (21/36)
詳しくは示せませんが… SITE CHMOD 755 filename のようにコマンドを投げるしかないんじゃないでしょうか。quote が要ったかも… MFC では直接そこまでサポートされてないですが、Microsoft の情報にコマンドを投げる例があったような。
お礼
解決しました。 ありがとうございました。
お礼
今回は、VC6→VC7にすることで解決しました。 勉強になりました。 ありがとうございました。