WIN API GetFileSizeEx() 函数未在此范围内声明

WIN API GetFileSizeEx() function, was not declared in this scope

在我的 c++ class 中,我想使用 WIN API GetFileSizeEx() 函数。当我编译我的代码时,编译器说:

"error: 'GetFileSizeEx' was not declared in this scope".

但是,CreateFile() 或 WriteFile() 等其他函数可以完美运行。

在我的 class header 中,我声明:

#if defined(WINVER) && WINVER==0x0602 /* windows 8 */
#define WINVER 0x0602
#define _WIN32_WINNT 0x0602
#elif defined(WINVER) && WINVER==0x0601 /* windows 7 */
#define WINVER 0x0601
#define _WIN32_WINNT 0x0601
#elif defined(WINVER) && WINVER==0x0600 /* windows vista and server 2008 */
#define WINVER 0x0600
#define _WIN32_WINNT 0x0600
#elif defined(WINVER) && WINVER==0x0502 /* server 2003 */
#define WINVER 0x0502
#define _WIN32_WINNT 0x0502
#elif defined(WINVER) && WINVER==0x0501 /* windows xp */
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#endif

#include <windows.h>
#include <winbase.h>
#include <string>

在我的.cpp中class:

Test::Test()
{
hFile = CreateFile(TEXT("conf/configure_tool.txt"),
                           GENERIC_READ | GENERIC_WRITE,
                           0,
                           NULL,
                           OPEN_EXISTING,
                           0,
                           NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
    canAcces = false;
}else
{
    if(GetFileSizeEx(hFile,&sized) != 0)
    {
        canAcces = true;
    }
}
}

你有解决我问题的想法吗?

来自documentation

Minimum supported client Windows XP [desktop apps only]

因此您需要确保已将 WINVER 定义为 0x0501 或更大。

如果这不能解决问题,则可能的原因是您使用的 SDK 有缺陷。也许来自旧版本的非 MS 编译器。确保您拥有最新的 SDK。

必须要说的是,问题中试图定义 _WIN32_WINNT 的条件代码有点奇怪。为什么不在定义WINVER的同时定义_WIN32_WINNT