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 (返回的句柄,并传递给 HttpSendRequestHttpSendRequestEx) 。 此句柄不得使用 INTERNET_FLAG_DONT_CACHEINTERNET_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
起始点为零或文件的开头。 如果指定了FILE_BEGIN, 则 lDistanceToMove 将解释为新文件指针的无符号位置。
FILE_CURRENT
文件指针的当前值是起始点。
FILE_END
当前文件末尾位置是起点。 如果内容长度未知,此方法将失败。

[in] dwContext

此参数是保留的,必须为 0。

返回值

函数成功,返回当前文件位置。 返回值为 INVALID_SET_FILE_POINTER 表示潜在的故障,需要后跟对 GetLastError 的调用。

由于 INVALID_SET_FILE_POINTER 是新文件指针的低序 DWORD 的有效值,因此调用方必须检查函数的返回值和 GetLastError 返回的错误代码,以确定是否发生了错误。 如果发生错误,则 InternetSetFilePointer 的返回值 INVALID_SET_FILE_POINTERGetLastError 返回 NO_ERROR以外的值。

如果函数成功且 lpDistanceToMoveHighNULL,则返回值为新文件指针的低序 DWORD

请注意,如果函数返回 除 INVALID_SET_FILE_POINTER 以外的值,则对 InternetSetFilePointer 的调用已成功,无需调用 GetLastError

如果函数成功且 lpDistanceToMoveHigh 不为 NULL,则返回值为新文件指针的低阶 DWORDlpDistanceToMoveHigh 包含新文件指针的高阶 DWORD

如果新的文件指针为负值,则函数失败,不会移动文件指针,并且 GetLastError 返回的代码 ERROR_NEGATIVE_SEEK

如果 lpDistanceToMoveHighNULL ,并且新文件位置不适合 32 位值,则该函数将失败并返回 INVALID_SET_FILE_POINTER

注解

InternetReadFile 到达文件末尾后,不能使用此函数。

对于由 HttpOpenRequest 创建并由 HttpSendRequestEx 发送的 HINTERNET 句柄,在使用 InternetSetFilePointer 之前,必须在句柄上调用 HttpEndRequest

如果内容长度未知,则无法可靠地使用 InternetSetFilePointer

与 WinINet API 的所有其他方面一样,无法从 DllMain 或全局对象的构造函数和析构函数中安全地调用此函数。

InternetSetFilePointer 已随时间推移而更改。 在 Internet Explorer 7 及更早版本中,它用于仅在 LONG 的边界内移动指针。 调用此旧版本的函数时, lDistanceToMove 包含整个值。 正值在 文件中向前移动指针;负值将其向后移动。 lpDistanceToMoveHigh 是保留的,并且设置为 0。 在当前版本中, lpDistanceToMoveHigh 是一个有效值,其中会指示任何负值。

注意 WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP Services (WinHTTP)
 

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wininet.h
Library Wininet.lib
DLL Wininet.dll

另请参阅

常用函数

WinINet 函数