8

我正在尝试调试一个操作文件的程序。例如,我将文件指针设置为偏移量 4(使用基数 0),但它似乎从偏移量 5 开始。

为了弄清楚发生了什么,我想输入一行来打印当前文件指针(我没有为这个小项目使用 IDE,只是 Notepad2 和命令行)。不幸的是,似乎没有一个 Windows API 函数来检索当前文件指针,只有一个来设置它。

我记得能够在 Pascal(在 DOS 中)中找到当前文件指针,但是如何在 Windows 中的 C++ 中确定当前文件指针?

4

1 回答 1

19

与大多数同时提供 getter 和 setter(在读写意义上)的函数不同,确实没有GetFilePointeror GetFilePointerEx

但是,可以通过调用来检索该值。这两个函数从 中返回返回/输出,但您必须确保将的偏移量指定为模式。这样,它从它所在的位置移动 0 个字节,然后返回(我不能保证它是否会浪费 CPU 周期和 RAM 来执行零移动,但我认为他们已经优化为不这样做)。SetFilePointer(Ex)SetFilePointerSetFilePointer0 FILE_CURRENT

是的,它不一致且令人困惑(并且冗余且设计不佳),但是您可以将其包装在自己的GetFilePointer(Ex)函数中:

DWORD    GetFilePointer   (HANDLE hFile) {
    return SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
}


LONGLONG GetFilePointerEx (HANDLE hFile) {
    LARGE_INTEGER liOfs={0};
    LARGE_INTEGER liNew={0};
    SetFilePointerEx(hFile, liOfs, &liNew, FILE_CURRENT);
    return liNew.QuadPart;
}
于 2013-07-17T18:05:24.810 回答