【发布时间】:2010-05-24 17:46:04
【问题描述】:
我浏览了整个互联网,但似乎找不到合适的解决方案。我希望能够在 C++ 中以编程方式获取资源管理器可以转换为真实路径的路径“%ALLUSERSPROFILE%\Application Data”。
我可以在不依赖第三方代码的情况下做到这一点吗?
【问题讨论】:
标签: c++ windows application-data
我浏览了整个互联网,但似乎找不到合适的解决方案。我希望能够在 C++ 中以编程方式获取资源管理器可以转换为真实路径的路径“%ALLUSERSPROFILE%\Application Data”。
我可以在不依赖第三方代码的情况下做到这一点吗?
【问题讨论】:
标签: c++ windows application-data
使用 SHGetFolderPath 和 CSIDL_COMMON_APPDATA 作为 CSIDL。
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)))
{
//....
}
【讨论】:
只是补充interjay的回答
我必须包含 shlobj.h 才能使用 SHGetFolderPath。
通常您可能需要从 appdata 读取文件,
为此,您需要使用pathAppend 函数(为此需要shlwapi.h)。
#include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")
#include "shlobj.h"
TCHAR szPath[MAX_PATH];
// Get path for each computer, non-user specific and non-roaming data.
if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath ) ) )
{
// Append product-specific path
PathAppend( szPath, _T("\\My Company\\My Product\\1.0\\") );
}
更多详情请见here。
【讨论】:
#include <tchar.h>
TEXT() 宏而不是_T() 宏(或者,完全停止使用TCHAR - 除非您确实需要支持Win9x/ME)。 TEXT() 由 Win32 API 使用,_T() 由 C 运行时库使用。
您也可以从注册表中读取值
路径 = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell 文件夹
key = 通用应用数据
【讨论】: