FtpOpenFile FTPでリモートのファイルをオープン

Cの宣言:

HINTERNET FtpOpenFile(
	IN HINTERNET hFtpSession,
	IN LPCSTR FileName,
	IN DWORD Access,
	IN DWORD Flags,
	IN DWORD Context);

説明:

hFtpSessionが示すFTPセッションでFileNameで指定されたファイルをオープンする。

引数の意味は以下の通り。
hFtpSession FTPセッションのハンドル。
FileName オープンするファイルの名前。
Access オープン時のアクセスの種別。後述の表を参照。
Flags ファイル転送の種別を表すフラグ。後述の表を参照。
Context コールバックに渡すアプリケーション定義の値。

Accessに指定可能な値は、以下のいずれかである。
GENERIC_READ 読み取りアクセスで開く。
GENERIC_WRITE 書き込みアクセスで開く。

Flagsには、まず以下のいずれかを指定する。
FTP_TRANSFER_TYPE_ASCII ASCII転送。
FTP_TRANSFER_TYPE_BINARY バイナリ転送。
FTP_TRANSFER_TYPE_UNKNOWN デフォルトではFTP_TRANSFER_TYPE_BINARY。

次に、以下の任意の組み合わせを論理和によって指定する。
INTERNET_FLAG_HYPERLINK 再読み込みすべきかどうかの判断時に有効期限・最終更新時刻がサーバから返されない場合強制的に再読み込みする。
INTERNET_FLAG_MAKE_PERSISTENT キャッシュに永続的要素として追加する。これにより、通常のキャッシュのクリーンアップ、整合性チェック、ごみは行きなどの際にこの要素が削除されない。
INTERNET_FLAG_RELOAD 要求したファイル、オブジェクト、ディレクトリリストをキャッシュから取得するのでなく、強制的にサーバから再読み込みする。
INTERNET_FLAG_RESYNCHRONIZE FTPリソースをサーバから再読み込みする。
INTERNET_FLAG_NEED_FILE ファイルがキャッシュできない場合に一時ファイルを作成する。

戻り値は、オープンされたファイルを識別するハンドルである。関数の実行に失敗した場合、NULLが返される。

Cのサンプル:

InternetWriteFileを使用して、リモート上に現時点の時刻をテキスト化したHTMLファイルを作成する。
void WriteTimePage()
{
	SYSTEMTIME st;
	char buf[1000];
	HINTERNET hInternet;
	HINTERNET hFtpSession;
	HINTERNET hFile;
	DWORD WriteBytes;

	/* 元となるHTMLドキュメントを作成 */
	GetLocalTime(&st);

	wsprintf(buf, "<html>\n\t<body>\n\t\t現在の時刻は %04d/%02d/%02d %02d:%02d:%02dです.\n\t</body>\n</html>\n",
		st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

	/* WININETの初期化 */
	hInternet = InternetOpen(
		"WININET Sample Program",
		INTERNET_OPEN_TYPE_PRECONFIG,
		NULL,
		NULL,
		0);

	/* ftpサイトへ接続 */
	hFtpSession = InternetConnect(
		hInternet,
		"ftp.hogehoge.herohero",
		INTERNET_DEFAULT_FTP_PORT,
		"foo",
		"bar",
		INTERNET_SERVICE_FTP,
		0,
		0);

	/* “time.html”というファイルを書き込みアクセスでオープン */
	hFile = FtpOpenFile(
		hFtpSession,
		"time.html",
		GENERIC_WRITE,
		FTP_TRANSFER_TYPE_ASCII,
		0);

	/* オープンしたファイルへHTMLドキュメントの内容を書き込む */
	InternetWriteFile(
		hFile,
		buf,
		lstrlen(buf) + 1,
		&WriteBytes);

	/* 後処理 */
	InternetCloseHandle(hFile);
	InternetCloseHandle(hFtpSession);
	InternetCloseHandle(hInternet);
	
}

(original text:1999/04/21 更新)

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