获取文件指针的位置

时间:2012-01-20 17:33:27

标签: c++ c file winapi

在Windows中,是否无法获取文件指针的当前位置?

例如,如果我使用SetFilePointer,并且我想确定文件中的位置,那么文件指针在搜索之后就会被清除?

3 个答案:

答案 0 :(得分:8)

该函数的返回值告诉您新位置。引用the documentation

  

如果函数成功且lpDistanceToMoveHigh为NULL,则返回   value是新文件指针的低位DWORD。

     

注意如果函数返回的值不是   INVALID_SET_FILE_POINTER,对SetFilePointer的调用已成功。   您不需要调用GetLastError。

     

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

如果您想要发现当前位置而不移动它,那么通过"移动方法" FILE_CURRENT的距离为零。

该文档还包含一个示例,说明如何将该函数包装成一个不需要将位置的上​​部和下部拆分为单独变量的函数。

答案 1 :(得分:7)

您可以使用:

high_dword = 0;

low_dword = SetFilePointer(file, 0, &high_dword, FILE_CURRENT);

pos = high_dword << 32 | low_dword

答案 2 :(得分:2)

SetFilePointer返回新文件指针,但仅适用于文件偏移量&lt; 4GB。如果要处理较大的文件,请使用SetFilePointerEx

如果您只想检索当前位置,请使用偏移量为零的FILE_CURRENT。