InternetSetFilePointer インターネット上のファイルのファイルポインタ位置の設定

Cの宣言:

BOOL InternetSetFilePointer(
	IN HINTERNET hFile,
	IN LONG Distance,
	IN PVOID Reserved,
	IN DWORD MoveMethod,
	IN DWORD Context);

説明:

InternetReadFileでのファイル読み込み位置を設定する。

引数の意味は以下の通り。
hFile FtpOpenFile、GopherOpenFile、InternetOpenUrlHttpOpenRequest(GETまたはHEADを使用しHttpSendRequestに渡したとき)で返されたハンドル。
Distance 移動量。
MoveMethod 移動方法を表す真偽値。後述の表を参照。
Context 0でなければならない。

MoveMethodに指定可能な値は以下のいずれかのフラグである。
FILE_BEGIN Distanceはファイルの先頭からの位置を表す。
FILE_CURRENT Distanceは現在のファイル位置からの相対位置を表す。
FILE_END Distanceはファイルの終端からの位置を表す。現在のファイルサイズが不明の場合、このフラグは失敗する。

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

Cのサンプル:

InternetSetFilePointerを利用して、http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/other.htmlのソースを、最初の3000バイトを読み飛ばし、3000バイト目以降のソースを表示する。
void GetHtmlTail()
{
	HINTERNET hInternet;
	HINTERNET hFile;
	char Buf[1000];
	DWORD ReadSize;
	BOOL bResult;
	DWORD Pos;

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

	/* URLをオープン */
	hFile = InternetOpenUrl(
		hInternet,
		"http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/other.html",
		NULL,
		0,
		INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD,
		0);

	/* ファイルポインタの設定 */
	Pos = InternetSetFilePointer(
		hFile,
		3000,
		NULL,
		FILE_BEGIN,
		0);

	if(Pos == -1) printf("err(%d).\n", GetLastError());

	/* ファイルの読み込み */
	for(;;) {
		ReadSize = 1000;

		bResult = InternetReadFile(
			hFile,
			Buf,
			1000,
			&ReadSize);

		if(bResult && (ReadSize == 0)) break;

		Buf[ReadSize] = '\0';
		printf("%s", Buf);
	}

	/* 後処理 */
	InternetCloseHandle(hFile);
	InternetCloseHandle(hInternet);
}
(original text:1999/04/21 更新)

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