SetFilePointer函数移动打开文件的文件指针。
DWORD SetFilePointer(id
HANDLE 【HFILE】, | //文件的句柄 |
LONG 【lDistanceToMove】, | //移动文件指针的字节数 |
PLONG 【lpDistanceToMoveHigh】, | //要移动的距离的高阶字的地址 |
DWORD 【dwMoveMethod】 | //如何移动 |
); |
参数
【HFILE】
标识文件指针要移动的文件。必须使用GENERIC_READ或GENERIC_WRITE访问该文件创建文件句柄。
【lDistanceToMove】
指定移动文件指针的字节数。正值将指针向前移动到文件中,负值向后移动。
【lpDistanceToMoveHigh】
指向高位字的64位距离移动。如果此参数的值为NULL,则SetFilePointer只能对最大大小为2 ^ 32 - 2的文件进行操作。如果指定了此参数,则最大文件大小为2 ^ 64 - 2。该参数还接收文件指针的新值的高位字。
【dwMoveMethod】
指定文件指针移动的起始点。此参数可以是以下值之一:
值 | 含义 |
FILE_BEGIN | 起始点为零或文件的开头。如果指定了FILE_BEGIN,则【DistanceToMove】被解释为新的文件指针的无符号位置。 |
FILE_CURRENT | 文件指针的当前值是起始点。 |
FILE_END | 当前文件结束位置是起始点。 |
返回值
如果SetFilePointer函数成功,则返回值是新文件指针的低位双字,如果【lpDistanceToMoveHigh】不为NULL,则该函数将新文件指针的高位双字写入LONG该参数指向。
如果函数失败,并且【lpDistanceToMoveHigh】为NULL,则返回值为0xFFFFFFFF。要获取扩展错误信息,请调用GetLastError.
如果函数失败,并且【lpDistanceToMoveHigh】不为NULL,则返回值为0xFFFFFFFF,GetLastError将返回除NO_ERROR之外的值。
备注
您不能将SetFilePointer功能与非查询设备(例如管道或通信设备)的句柄一起使用。要确定【HFILE】的文件类型,请使用GetFileType功能。
在多线程应用程序中设置文件指针时应该小心。例如,其线程共享文件句柄,更新文件指针和从文件读取的应用程序必须使用关键部分对象或互斥体对象来保护此序列。有关这些对象的更多信息,请参阅互斥对象和关键部分对象.
如果在设置了FILE_FLAG_NO_BUFFERING标志的情况下打开了【HFILE】文件句柄,则应用程序只能将文件指针移动到扇区对齐位置。扇区对齐位置是一个位置,它是卷的扇区大小的整数倍。应用程序可以通过调用GetDiskFreeSpace函数获取卷的扇区大小。如果一个应用程序调用{??989796098}带有距离移动值,导致不是扇区对齐的位置和使用FILE_FLAG_NO_BUFFERING打开的句柄,则该函数将失败,并且GetLastError返回ERROR_INVALID_PARAMETER。
请注意,如果返回值为0xFFFFFFFF,并且【lpDistanceToMoveHigh】为非空值,则应用程序必须调用GetLastError来确定该函数是成功还是失败。以下示例代码说明了这一点:
//
// Case One:调用该函数
// lpDistanceToMoveHigh == NULL
//尝试将hFile的文件指针移动一些距离
dwPointer = SetFilePointer (hFile, lDistance,
NULL, FILE_BEGIN) ;
//如果我们失败了...
if (dwPointer == 0xFFFFFFFF) {
//获取错误代码
dwError = GetLastError() ;
//处理那个失败
.
.
.
} //结束错误处理程序
//
//案例二:调用函数
// lpDistanceToMoveHigh!= NULL
//尝试移动hFile的文件指针一些巨大的距离
dwPointerLow = SetFilePointer (hFile, lDistanceLow,
& lDistanceHigh, FILE_BEGIN) ;
//如果我们失败了...
if (dwPointerLow == 0xFFFFFFFF
&&
(dwError = GetLastError()) != NO_ERROR ){
//处理那个失败
.
.
.
} //结束错误处理程序
也可以看看
GetDiskFreeSpace, GetFileType, ReadFile, ReadFileEx, WriteFile, WriteFileEx