是否没有GetFilePointer(Ex)Windows API函数

Is there no GetFilePointer(Ex) Windows API function?

本文关键字:Windows API 函数 Ex GetFilePointer 是否      更新时间:2023-10-16

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

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

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

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

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

是的,它是不一致的和令人困惑的(而且是冗余的和糟糕的设计),但你可以将它封装在你自己的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;
}