我正在从硬盘中动态读取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”
答案 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上,您不应真正使用CHAR
,string
和后缀A
,理想情况下,您应该使用Unicode(UTF-16LE),这意味着WCHAR
, wstring
和W
函数。