嘿,我对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来设置正确的路径。有没有一种标准的方法呢?
答案 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版本