BOOL FtpGetFile( IN HINTERNET hFtpSession, IN LPCSTR RemoteFileName, IN LPCSTR LocalFileName, IN BOOL bExists, IN DWORD FileAttr, IN DWORD Flags, IN DWORD Context);
引数の意味は以下のとおり。
| hFtpSession | FTPセッションのハンドル。 |
| RemoteFileName | 取得元のファイル名。 |
| LocalFileName | 転送先のファイル名。 |
| bExists | LocalFileNameで指定されたファイルが既にローカルに存在するときに、エラーにするか否かを表す真偽値。 |
| FileAttr | 転送結果のファイルに付与する属性。FILE_ATTRIBUTE_*が指定可能。詳細はCreateFileを参照。 |
| Flags | ファイルの取得の方法を指定するフラグ。後述の表を参照。 |
| Context | コールバック関数へ渡す32bit値。 |
Flagsには、まず次のいずれかのフラグを指定する。
| FTP_TRANSFER_TYPE_ASCII | 表現形式をASCIIとして転送を行う。 |
| FTP_TRANSFER_TYPE_BINARY | 表現形式をIMAGEとして転送を行う。 |
| FTP_TRANSFER_TYPE_UNKNOWN | デフォルトの転送方法を使用する。(バイナリ転送) |
| INTERNET_FLAGS_TRANSFER_ASCII | ASCIIファイルを転送する。 |
| INTERNET_FLAGS_TRANSFER_BINARY | バイナリファイルを転送する。 |
次に、以下のフラグの組み合わせを論理和で指定する。
| INTERNET_FLAG_DONT_CACHE | |
| INTERNET_FLAG_HYPERLINK | |
| INTERNET_FLAG_MAKE_PERSISTENT | |
| INTERNET_FLAG_MUST_CACHE_REQUEST | |
| INTERNET_FLAG_NEED_FILE | |
| INTERNET_FLAG_NO_CACHE_WRITE | |
| INTERNET_FLAG_RELOAD | |
| INTERNET_FLAG_RESYNCHRONIZE |
戻り値は、関数の実行に成功したか否かを表す真偽値である。
void GetRemoteFile()
{
HINTERNET hInternet;
HINTERNET hFtpSession;
/* WININETの初期化 */
hInternet = InternetOpen(
"WININET Sample Program",
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0);
/* FTPセッションの確立 */
hFtpSession = InternetConnect(
hInternet,
"ftp.cool.ne.jp",
INTERNET_DEFAULT_FTP_PORT,
"foo",
"bar",
INTERNET_SERVICE_FTP,
0,
0);
/* リモートにあるファイルをローカルへ転送 */
FtpGetFile(
hFtpSession,
"hello.html",
"c:\\doc\\hello.html",
FALSE,
FILE_ATTRIBUTE_ARCHIVE,
FTP_TRANSFER_TYPE_ASCII,
0);
/* 後処理 */
InternetCloseHandle(hFtpSession);
InternetCloseHandle(hInternet);
}