FtpGetFile FTPでリモートからファイルを取得

Cの宣言:

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セッションにおいて、ファイルをリモートからローカルへ転送する。

引数の意味は以下のとおり。
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

戻り値は、関数の実行に成功したか否かを表す真偽値である。

Cのサンプル:

FtpGetFileを使用して、リモートにある“hello.html”というファイルをローカルへ“c:\doc\hello.html”として転送する。
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);
}

(original text:1999/05/17 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。