我正在尝试调试一个操作文件的程序。例如,我将文件指针设置为偏移量 4(使用基数 0),但它似乎从偏移量 5 开始。
为了弄清楚发生了什么,我想输入一行来打印当前文件指针(我没有为这个小项目使用 IDE,只是 Notepad2 和命令行)。不幸的是,似乎没有一个 Windows API 函数来检索当前文件指针,只有一个来设置它。
我记得能够在 Pascal(在 DOS 中)中找到当前文件指针,但是如何在 Windows 中的 C++ 中确定当前文件指针?
我正在尝试调试一个操作文件的程序。例如,我将文件指针设置为偏移量 4(使用基数 0),但它似乎从偏移量 5 开始。
为了弄清楚发生了什么,我想输入一行来打印当前文件指针(我没有为这个小项目使用 IDE,只是 Notepad2 和命令行)。不幸的是,似乎没有一个 Windows API 函数来检索当前文件指针,只有一个来设置它。
我记得能够在 Pascal(在 DOS 中)中找到当前文件指针,但是如何在 Windows 中的 C++ 中确定当前文件指针?
与大多数同时提供 getter 和 setter(在读写意义上)的函数不同,确实没有GetFilePointer
or GetFilePointerEx
。
但是,可以通过调用来检索该值。这两个函数从 中返回返回/输出,但您必须确保将和的偏移量指定为模式。这样,它从它所在的位置移动 0 个字节,然后返回(我不能保证它是否会浪费 CPU 周期和 RAM 来执行零移动,但我认为他们已经优化为不这样做)。SetFilePointer
(Ex)
SetFilePointer
SetFilePointer
0
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;
}