Ответ 1
Используйте SHGetFolderPath
с CSIDL_COMMON_APPDATA
как CSIDL.
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)))
{
//....
}
Я смотрел по всему Интернету, и, похоже, не было достойного решения, которое я мог найти. Я хочу иметь возможность программно в С++ получить путь "% ALLUSERSPROFILE%\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\\") );
}
Подробнее см. здесь.
вы также можете прочитать значение из реестра
path = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Папки оболочки
key = Общие AppDatastrong >