有没有办法在Windows中以字符串形式获取用户的主路径?

时间:2019-04-23 16:05:34

标签: c++ windows

我正在从硬盘中动态读取XML文件。 在OSX上,我可以使用getenv(“ HOME”)函数获取主目录。 但是,这对我而言不适用于Windows。当在Windows上使用getenv()函数而不是用户名时,我只得到一个点。 是否有一个函数可以将根目录作为字符串提供给Windows和OSX呢?

string  HOME = getenv("HOME") ? getenv("HOME") : ".";
string homePath;
string s1 = HOME;
string s2 = "/Documents/Resolume Arena 6/Preferences/AdvancedOutput.xml";
homePath = s1 + s2;

    cout << "preferences path: " << homePath << endl;

这给了我:

“首选项路径:./ Documents / Resolume Arena 6 / Preferences / AdvancedOutput.xml”

1 个答案:

答案 0 :(得分:0)

在Windows上,您should store application preferences in a folder inside %AppData%

#ifdef _WIN32
#include <windows.h>
#include <Shlobj.h>
#include <Shlwapi.h>
#endif

...

string homePath;
#ifdef _WIN32
CHAR buf[MAX_PATH+100];
if (!SHGetSpecialFolderPathA(0, buf, CSIDL_APPDATA, TRUE))
{
  // Handle error
}
PathAppendA(buf, "MyCompany\\MyApplication);
homePath = buf
#else
homePath = ...; // OSX code
#endif
cout << "preferences path: " << homePath << endl;

在Windows上,您不应真正使用CHARstring和后缀A,理想情况下,您应该使用Unicode(UTF-16LE),这意味着WCHARwstringW函数。