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:\Users\Kandy\AppData\Roaming
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:\Users\Kandy\AppData\Local
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\n", GetUserAppDataDir().c_str());
	wprintf(L"GetLocalAppDataPath : %s\n", GetLocalAppDataPath().c_str());

	system("pause");
	return 0;
}


输出结果:

GetUserAppDataDir : C:\Users\Kandy\AppData\Roaming\hello.exe
GetLocalAppDataPath : C:\Users\Kandy\AppData\Local


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值