牛骨文教育服务平台(让学习变的简单)
博文笔记

SHGetSpecialFolderPath 与 SHGetFolderPathW 的使用

创建时间:2016-10-21 投稿人: 浏览次数:2368

使用 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


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。