Visual Studio 2013中fileapi.h为何不包含GetDiskSpaceInformationA函数?
问题原因与解决方案
核心原因:Windows SDK版本不匹配
你遇到的问题和目标架构(x86/x64)无关,主要是Visual Studio 2013默认搭载的Windows SDK版本过旧。GetDiskSpaceInformationA()这类函数是Windows 10 1703版本之后才新增的API,而VS2013默认配套的是Windows 8.1 SDK,这个版本的头文件里根本没有这些新函数的声明,自然会报“未定义”错误。
解决办法
方法1:升级Windows SDK并配置项目
- 下载并安装包含目标函数的Windows SDK版本(比如Windows 10 1703及以上版本)。
- 打开项目属性:右键项目 → 「属性」→ 「配置属性」→ 「常规」,在「Windows SDK版本」下拉菜单中选择刚安装的新版本SDK。
- 配置预处理器宏:在「配置属性」→ 「C/C++」→ 「预处理器」→ 「预处理器定义」中,添加对应Windows版本的宏,比如针对Windows 10 1703,添加
_WIN32_WINNT=0x0A00(或者更具体的_WIN32_WINNT_WIN10_CREATOR),确保头文件会暴露这些新API的声明。
方法2:使用兼容旧SDK的替代函数
如果暂时无法升级SDK,可以改用旧版本SDK支持的GetDiskFreeSpaceExA()函数,它同样可以获取磁盘总空间、可用空间等核心信息,用法示例:
#include <windows.h> #include <iostream> int main() { LPCSTR drive = "C:\\"; ULARGE_INTEGER freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes; if (GetDiskFreeSpaceExA(drive, &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes)) { std::cout << "总空间:" << totalNumberOfBytes.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl; std::cout << "可用空间:" << freeBytesAvailable.QuadPart / (1024 * 1024 * 1024) << " GB" << std::endl; } else { std::cout << "获取失败,错误码:" << GetLastError() << std::endl; } return 0; }
内容的提问来源于stack exchange,提问作者MarkusAnd
相关产品推荐
相关产品推荐

