【发布时间】:2012-02-15 06:11:55
【问题描述】:
在 Windows 中,有没有办法获取文件指针的当前位置?
例如,如果我使用SetFilePointer,并且我想确定文件指针在查找后结束的文件中的位置?
【问题讨论】:
在 Windows 中,有没有办法获取文件指针的当前位置?
例如,如果我使用SetFilePointer,并且我想确定文件指针在查找后结束的文件中的位置?
【问题讨论】:
你可以使用:
high_dword = 0;
low_dword = SetFilePointer(file, 0, &high_dword, FILE_CURRENT);
pos = high_dword << 32 | low_dword
【讨论】:
SetFilePointer 返回新文件指针,但仅适用于文件偏移量 SetFilePointerEx。
如果您只想检索当前位置,请使用偏移量为零的 FILE_CURRENT。
【讨论】:
该函数的返回值告诉您新的位置。引用the documentation:
如果函数成功并且 lpDistanceToMoveHigh 为 NULL,则返回 value 是新文件指针的低位 DWORD。
注意如果函数返回的值不是 INVALID_SET_FILE_POINTER,调用 SetFilePointer 成功。 您不需要调用 GetLastError。
如果函数成功并且 lpDistanceToMoveHigh 不为 NULL,则返回 value 是新文件指针的低位 DWORD,并且 lpDistanceToMoveHigh 包含新文件的高位 DWORD 指针。
如果您想在不移动的情况下发现当前位置,则传递FILE_CURRENT 的“移动方法”和零距离。
该文档还包含一个示例,说明如何将该函数包装成一个不需要将位置的上部和下部拆分为单独变量的函数。
【讨论】: