InternetSetFilePointer 函数 (wininet.h)
设置 InternetReadFile 的文件位置。 这是一个同步调用;但是,如果缓存中的数据不可用且服务器不支持随机访问,则对 InternetReadFile 的后续调用可能会阻止或返回挂起。
语法
DWORD InternetSetFilePointer(
[in] HINTERNET hFile,
[in] LONG lDistanceToMove,
[in, out] PLONG lpDistanceToMoveHigh,
[in] DWORD dwMoveMethod,
[in] DWORD_PTR dwContext
);
参数
[in] hFile
使用 GET 或 HEAD HTTP 谓词对 Http 或 HTTPS URL) (InternetOpenUrl ( ( 调用 InternetOpenUrl (返回的句柄,并传递给 HttpSendRequest 或 HttpSendRequestEx) 。 此句柄不得使用 INTERNET_FLAG_DONT_CACHE 或 INTERNET_FLAG_NO_CACHE_WRITE 值集创建。
[in] lDistanceToMove
用于移动文件指针的有符号 64 位字节数的低序 32 位。 Internet Explorer 7 及更早版本: InternetSetFilePointer 用于仅在 LONG 边界内移动指针。 调用此旧版函数时, 保留 lpDistanceToMoveHigh ,应设置为 0。 正值在 文件中向前移动指针;负值将其向后移动。
[in, out] lpDistanceToMoveHigh
指向要移动的有符号 64 位距离的高阶 32 位的指针。 如果不需要高阶 32 位,则必须将此指针设置为 NULL。 如果不是 NULL,则此参数还接收文件指针的新值的高阶 DWORD。 正值在 文件中向前移动指针;负值将其向后移动。Internet Explorer 7 及更早版本: InternetSetFilePointer 用于仅在 LONG 边界内移动指针。 调用此旧版函数时, 保留 lpDistanceToMoveHigh ,应设置为 0。
[in] dwMoveMethod
文件指针移动的起点。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
起始点为零或文件的开头。 如果指定了FILE_BEGIN, 则 lDistanceToMove 将解释为新文件指针的无符号位置。 |
|
文件指针的当前值是起始点。 |
|
当前文件末尾位置是起点。 如果内容长度未知,此方法将失败。 |
[in] dwContext
此参数是保留的,必须为 0。
返回值
函数成功,返回当前文件位置。 返回值为 INVALID_SET_FILE_POINTER 表示潜在的故障,需要后跟对 GetLastError 的调用。
由于 INVALID_SET_FILE_POINTER 是新文件指针的低序 DWORD 的有效值,因此调用方必须检查函数的返回值和 GetLastError 返回的错误代码,以确定是否发生了错误。 如果发生错误,则 InternetSetFilePointer 的返回值 INVALID_SET_FILE_POINTER , GetLastError 返回 NO_ERROR以外的值。
如果函数成功且 lpDistanceToMoveHigh 为 NULL,则返回值为新文件指针的低序 DWORD 。
请注意,如果函数返回 除 INVALID_SET_FILE_POINTER 以外的值,则对 InternetSetFilePointer 的调用已成功,无需调用 GetLastError。
如果函数成功且 lpDistanceToMoveHigh 不为 NULL,则返回值为新文件指针的低阶 DWORD , lpDistanceToMoveHigh 包含新文件指针的高阶 DWORD 。
如果新的文件指针为负值,则函数失败,不会移动文件指针,并且 GetLastError 返回的代码 ERROR_NEGATIVE_SEEK。
如果 lpDistanceToMoveHigh 为 NULL ,并且新文件位置不适合 32 位值,则该函数将失败并返回 INVALID_SET_FILE_POINTER。
注解
InternetReadFile 到达文件末尾后,不能使用此函数。
对于由 HttpOpenRequest 创建并由 HttpSendRequestEx 发送的 HINTERNET 句柄,在使用 InternetSetFilePointer 之前,必须在句柄上调用 HttpEndRequest。
如果内容长度未知,则无法可靠地使用 InternetSetFilePointer。
与 WinINet API 的所有其他方面一样,无法从 DllMain 或全局对象的构造函数和析构函数中安全地调用此函数。
InternetSetFilePointer 已随时间推移而更改。 在 Internet Explorer 7 及更早版本中,它用于仅在 LONG 的边界内移动指针。 调用此旧版本的函数时, lDistanceToMove 包含整个值。 正值在 文件中向前移动指针;负值将其向后移动。 lpDistanceToMoveHigh 是保留的,并且设置为 0。 在当前版本中, lpDistanceToMoveHigh 是一个有效值,其中会指示任何负值。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | wininet.h |
Library | Wininet.lib |
DLL | Wininet.dll |