在C++中获取操作系统版本的最佳跨平台方式

Ign*_*eme 4 c++ windows

嘿,我对C++有点新意,正在编写一个简单的程序.我的程序将使用一些文件夹


Windows 7路径:C:\ Users \%username%\ Appdata\Local ...

Windows XP路径:C:\ Documents and Settings \%username%\ Local Settings\Application Data ...

Unix:/ home /%username%/ .hiddenfolder/...


现在问题是windows.在我的头文件中,我可以做得很好

#ifdef _WIN32

区分Windows和unix版本的程序,但在运行时我需要找到用户是否使用XP或Vista/7来设置正确的路径.有这样做的标准方法吗?

Cat*_*lus 8

您根本不需要操作系统版本.

在*nixes(嗯,在Linux和OSX上肯定,但也应该在其他人上)你可以使用HOME环境变量.在Windows上,您必须(是的,必须,因为路径可以重新映射/本地化并且硬编码它们是获得更多工作而不是必要的好方法)使用SHGetFolderPath函数(它被标记为已弃用,但它不会在任何时候很快到达,并且较新的SHGetKnownFolderPath是> = Vista),例如

TCHAR buffer[MAX_PATH];
HRESULT res = SHGetFolderPath(
    NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, buffer
);

if (SUCCEEDED(res)) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)