在Windows中,是否无法获取文件指针的当前位置?
例如,如果我使用SetFilePointer
,并且我想确定文件中的位置,那么文件指针在搜索之后就会被清除?
答案 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。