Как мне получить путь к данным приложения в Windows, используя C ++? - PullRequest
26 голосов
/ 24 мая 2010

Я просмотрел весь интернет, и, кажется, не было приличного решения, которое я мог бы найти. Я хочу иметь возможность программно в C ++ получить путь "% ALLUSERSPROFILE% \ Application Data", который исследователь может преобразовать в реальный путь.

Можно ли сделать это, не полагаясь на сторонний код?

Ответы [ 3 ]

44 голосов
/ 24 мая 2010

Используйте SHGetFolderPath с CSIDL_COMMON_APPDATA в качестве CSIDL.

TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)))
{
    //....
}
18 голосов
/ 14 июня 2012

Просто чтобы дополнить ответ интерджая

  1. Я должен был включить shlobj.h, чтобы использовать SHGetFolderPath.

  2. Часто вам может понадобиться прочитать файл из 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\\") );
}

Подробнее см. здесь .

0 голосов
/ 24 мая 2010

вы также можете прочитать значение из реестра

path = HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders

ключ = Общие данные приложения

...