Как мне получить имя пользователя и appname для указания пути к файлу

#c #winapi

#c #winapi

Вопрос:

Как я могу определить путь, подобный «C:/Users /<USER>/AppData/Local/<APPNAME>» для другого имени пользователя и приложения? Как мне настроить это, чтобы автоматически получать пользователя и appname? Спасибо.

Ответ №1:

Вы можете использовать SHGetKnownFolderPath , чтобы получить полный путь к локальному приложению:

 ...
#include <KnownFolders.h>
#include <ShlObj.h>
...
    SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_SIMPLE_IDLIST, NULL, amp;path); // NULL for current user
...
  

Ответ №2:

Чтобы получить локальный путь AppData для данного пользователя, используйте SHGetFolderPath() указание CSIDL_LOCAL_APPDATA или SHGetKnownFolderPath() specifying FOLDERID_LocalAppData . Оба используют необязательный пользовательский токен для запроса желаемой учетной записи пользователя. Если вы не предоставляете токен, используется пользователь, связанный с вызывающим потоком.

Ответ №3:

Чтобы получить имя пользователя:

 char username[MAX_PATH];
DWORD size = MAX_PATH;
GetUserName(username,amp;size);
  

Чтобы получить appname (имя исполняемого файла без «.exe»):

 char appname[MAX_PATH];
char buffer[MAX_PATH];

GetModuleFileName(NULL, appname,MAX_PATH); //get the string: "PATH\appname.exe"
char *szExe = NULL;
//Remove prefix
GetFullPathName(appname, MAX_PATH, buffer, amp;szExe);
//Remove suffix
strncpy_s(appname, szExe, strlen(szExe) - strlen(".exe"));