WinInetによるFTPサーバへの接続
ここでは、WinInetを使用してFTPサーバへの接続やファイルのアップロードなどの
方法を示します。
WinInetのAPIを使用するためには、以下の Header と Library が必要です。
Header : wininet.h
Library : WinInet.lib
【サンプル】
#include <wininet.h>
class CFtpSap
{
public:
CFtpSap(void);
~CFtpSap(void);
private:
//Handle
HINTERNET hInet, hConnection;
public:
// ftpサーバへ接続
int Connect_ftp(void);
// ftp接続を切断
int Disconnect_ftp(void);
// カレントディレクトリを変更
int ChCur_ftp(void);
// カレントディレクトリ内のファイルを検索
int Findfile_ftp(void);
// ファイルをダウンロード
int GetFile_ftp(void);
// ファイルをアップロード
int PutFile_ftp(void);
};
#include "FtpSap.h"
CFtpSap::CFtpSap(void)
{
}
CFtpSap::~CFtpSap(void)
{
}
// ftpサーバへ接続
int CFtpSap::Connect_ftp(void)
{
//WinINet functionsを初期化
hInet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0 );
//Ftpサーバへ接続
CString strIPA, strUser, strPW;
strIPA = "ftpサーバ名";
strUser = "接続ユーザ名";
strPW = "パスワード";
hConnection = InternetConnect(hInet, strIPA, INTERNET_DEFAULT_FTP_PORT,
strUser, strPW, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if(hConnection == NULL){
InternetCloseHandle(hInet);
return 0;
}
return 1;
}
// ftp接続を切断
int CFtpSap::Disconnect_ftp(void)
{
if(InternetCloseHandle(hConnection) == false) return 0;
if(InternetCloseHandle(hInet) == false) return 0;
return 1;
}
// カレントディレクトリを変更
int CFtpSap::ChCur_ftp(void)
{
//カレントディレクトリの変更
BOOL BRet = FtpSetCurrentDirectory(hConnection, "変更先ディレクトリ");
if(BRet == false){
return 0;
}
return 1;
}
// カレントディレクトリ内のファイルを検索
int CFtpSap::Findfile_ftp(void)
{
CStringArray ResultFiles;
WIN32_FIND_DATA w32FindData;
HINTERNET hFind;
int cnt;
cnt = 0;
//ファイルの検索
hFind = FtpFindFirstFile(hConnection, "*.*", &w32FindData, INTERNET_FLAG_RELOAD, 0);
do{
//Sets the client message to memory.
if(w32FindData.cFileName != NULL){
ResultFiles.Add(w32FindData.cFileName);
cnt++;
}
}while(TRUE == InternetFindNextFile(hFind, &w32FindData));
InternetCloseHandle(hFind);
return cnt;
}
// ファイルをダウンロード
int CFtpSap::GetFile_ftp(void)
{
BOOL BRet = FtpGetFile(hConnection, "ftpサーバ内の取得ファイル名", "保存ファイル名",
FALSE, FILE_ATTRIBUTE_NORMAL,INTERNET_FLAG_TRANSFER_BINARY, 0);
if(BRet == false){
return -1;
}
return 0;
}
// ファイルをアップロード
int CFtpSap::PutFile_ftp(void)
{
BOOL BRet = FtpPutFile(hConnection, "アップロードファイル名", "ftpサーバへの保存ファイル名",
INTERNET_FLAG_TRANSFER_BINARY, 0);
if(BRet == false){
return -1;
}
return 1;
}
[サンプル・ソース]