SHGetSpecialFolderPath 与 SHGetFolderPathW 的使用
使用 SHGetSpecialFolderPath 和 SHGetFolderPath来获取系统特殊文件夹路径,并使用 PathAppend 对路径进行组装,避免手工对文件路径进行判断,测试代码如下:
#include <string> #include <Windows.h> #include <tchar.h> #include <ShlObj.h> #include <Shlwapi.h>//PathAppendW #pragma comment (lib, "shlwapi.lib") //C:UsersKandyAppDataRoaming std::wstring GetUserAppDataDir(void) { // std::wstring appdata; wchar_t buffer[MAX_PATH]; ::ZeroMemory(buffer, MAX_PATH*sizeof(wchar_t)); if (::SHGetSpecialFolderPath(NULL, buffer, CSIDL_APPDATA, NULL)) { appdata = buffer; /*if (appdata.substr(appdata.length() - 1) != L"\") { appdata.append(L"\"); }*/ } //不为空 wchar_t szTmp [MAX_PATH] = {0}; wcscpy_s(szTmp, appdata.c_str()); ::PathAppendW(szTmp, L"hello.exe"); return szTmp; } //C:UsersKandyAppDataLocal std::wstring GetLocalAppDataPath() { std::wstring wsValue = L""; wchar_t wzLacalAppData[MAX_PATH] = {0}; if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, wzLacalAppData))) { wsValue = wzLacalAppData; } return wsValue; } int _tmain(int argc, _TCHAR* argv[]) { wprintf(L"GetUserAppDataDir : %s ", GetUserAppDataDir().c_str()); wprintf(L"GetLocalAppDataPath : %s ", GetLocalAppDataPath().c_str()); system("pause"); return 0; }
输出结果:
GetUserAppDataDir : C:UsersKandyAppDataRoaminghello.exe
GetLocalAppDataPath : C:UsersKandyAppDataLocal
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。