- // TestSHGetSpecialFolderLocation.cpp : Defines the entry point for the console application.
- //
-
- #include "stdafx.h"
-
- #include <io.h>
-
-
- #include <Shlobj.h>
- #pragma comment( lib, "shell32.lib"
-
- #include <string>
- #include <iostream>
- )
-
- using namespace std;
-
- /*
- 功能:取用户的AppData路径,并在下面建一个新的目录
- 测试环境:WinXP SP3 + VS2010
- 最后更新日期:2014-6-12
- 参考资料:http://blog.csdn.net/roger_77/article/details/1538447
- */
-
- std::wstring GetLocalAppDataPath()
- {
- wchar_t m_lpszDefaultDir[MAX_PATH];
- wchar_t szDocument[MAX_PATH] = {0};
- memset(m_lpszDefaultDir, 0, _MAX_PATH);
-
- LPITEMIDLIST pidl = NULL;
- SHGetSpecialFolderLocation(NULL, CSIDL_LOCAL_APPDATA, &pidl);
- if (pidl && SHGetPathFromIDList(pidl, szDocument))
- {
- GetShortPathName(szDocument,m_lpszDefaultDir, _MAX_PATH);
- }
-
- std::wstring wsR = m_lpszDefaultDir;
-
- return wsR;
- }
-
- std::wstring GetLocalAppDataPath(std::wstring appName)
- {
- std::wstring path = GetLocalAppDataPath();
- path.append(L"\\");
- path.append(appName);
-
- if ( _waccess(path.c_str(), 0) == -1 )
- {
- _wmkdir(path.c_str());
- }
-
- return path;
- }
-
- int _tmain(int argc, _TCHAR* argv[])
- {
- const std::wstring AppName = L"kagula";
-
- std::wstring path = GetLocalAppDataPath(AppName);
- std::wcout << path << std::endl;
-
- #ifdef _DEBUG
- ::system("pause");
- #endif
-
- return 0;
- }
|