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

时间:2011-02-14 05:19:08

标签: 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来设置正确的路径。有没有一种标准的方法呢?

4 个答案:

答案 0 :(得分:8)

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

On * 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)) {
    // ...
}

答案 1 :(得分:1)

版本检测既不必要也不充分,因为这些设置可以从默认值更改。使用SHGetKnownFolderPath(FOLDERID_RoamingAppData, ...)

答案 2 :(得分:0)

这些值是环境变量。您正在查看%appdata%或$ HOME / .app(不确定MAC方法,它们可能有“软件包”)。由于您将不得不在编译时知道目标是什么(胜利与其他),您可以知道要查找的环境变量。然后使用getenv获取值。

答案 3 :(得分:0)

您可以使用WINVER检测Windows版本