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
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: windows 获取当前进程所占内存
- 下一篇: libcurl 如何支持https
