HINTERNET FtpOpenFile( IN HINTERNET hFtpSession, IN LPCSTR FileName, IN DWORD Access, IN DWORD Flags, IN DWORD Context);
引数の意味は以下の通り。
| 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が返される。
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);
}