解説
Wininet.dllを利用してFTPサーバーからファイルを取得したり、ファイルをアップロード する方法。
(ブロッキング動作であれば)InternetOpen、InternetConnect、FtpGetFileやFtpPutFile というAPIを利用することで簡単にできてしまう。
ソースコード
PC内のboot.iniファイルをアップロードし、アップロードしたファイルを名前を変えてダウンロード する。
※ソースコード内のログイン名やパスワードは有効な値ではありません。適宜変更してください。
#include "wininet.h"
#pragma comment(lib,"wininet.lib")
bool EasyGetFile(LPCTSTR pszRemoteFile,LPCTSTR pszLocalFile,LPCTSTR pszServer,LPCTSTR pszUserID,LPCTSTR pszPassword);
bool EasyPutFile(LPCTSTR pszLocalFile,LPCTSTR pszRemoteFile,LPCTSTR pszServer,LPCTSTR pszUserID,LPCTSTR pszPassword);
bool Test()
{
bool ret;
ret = EasyPutFile(_T("c:\\boot.ini"),_T("/home/issei/htdocs/boot.ini"),_T("www.xxx.com"),_T("admin54"),_T("784b20nkdfa"));
if(ret)
EasyGetFile(_T("/home/issei/htdocs/boot.ini"),_T("c:\\boot2.ini"),_T("www.xxx.com"),_T("admin54"),_T("784b20nkdfa"));
return ret;
}
//
// FTPによるファイルの簡易ダウンロード
//
// ブロッキング動作!
//
// pszRemoteFile : サーバー側のファイルパスを指定。ex."/htdocs/index.html"
// pszLocalFile : ローカル側のファイルパスを指定。ex."c:\\index.html"
// pszServer : FTPサーバー名。ex."www.dinop.com"
// pszUserID : サーバーへのログインID。ex."issei"
// pszPassword : パスワード。ex."4hk48gf1dfs"
//
bool EasyGetFile(LPCTSTR pszRemoteFile,LPCTSTR pszLocalFile,LPCTSTR pszServer,LPCTSTR pszUserID,LPCTSTR pszPassword)
{
BOOL ret;
HINTERNET hInternet;
HINTERNET hFtp;
hInternet = NULL;
hFtp = NULL;
ret = FALSE;
hInternet = ::InternetOpen(NULL,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if(hInternet)
hFtp = ::InternetConnect(hInternet,pszServer,INTERNET_DEFAULT_FTP_PORT,pszUserID,pszPassword,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
if(hFtp)
ret = ::FtpGetFile(hFtp,pszRemoteFile,pszLocalFile,TRUE,0,FTP_TRANSFER_TYPE_BINARY,0);
if(hFtp)
::InternetCloseHandle(hFtp);
if(hInternet)
::InternetCloseHandle(hInternet);
ATLASSERT(ret);
return ret ? true : false;
}
//
// FTPによるファイルの簡易アップロード
//
// ブロッキング動作!
//
// pszLocalFile : ローカル側のファイルパスを指定。ex."c:\\index.html"
// pszRemoteFile : サーバー側のファイルパスを指定。ex."/htdocs/index.html"
// pszServer : FTPサーバー名。ex."www.dinop.com"
// pszUserID : サーバーへのログインID。ex."issei"
// pszPassword : パスワード。ex."4hk48gf1dfs"
//
bool EasyPutFile(LPCTSTR pszLocalFile,LPCTSTR pszRemoteFile,LPCTSTR pszServer,LPCTSTR pszUserID,LPCTSTR pszPassword)
{
BOOL ret;
HINTERNET hInternet;
HINTERNET hFtp;
hInternet = NULL;
hFtp = NULL;
ret = FALSE;
hInternet = ::InternetOpen(NULL,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if(hInternet)
hFtp = ::InternetConnect(hInternet,pszServer,INTERNET_DEFAULT_FTP_PORT,pszUserID,pszPassword,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
if(hFtp)
ret = ::FtpPutFile(hFtp,pszLocalFile,pszRemoteFile,FTP_TRANSFER_TYPE_BINARY,0);
if(hFtp)
::InternetCloseHandle(hFtp);
if(hInternet)
::InternetCloseHandle(hInternet);
ATLASSERT(ret);
return ret ? true : false;
}







