Поиск "~ / Библиотека / Поддержка приложений" из C ++? - PullRequest
12 голосов
/ 26 февраля 2011

Я написал приложение GTKmm и пытаюсь создать некоторые улучшения для OS X. Я хотел бы сохранить свой файл конфигурации в папке Application Support / myApp, однако я не могу найти правильный способ найти эту папку.

Я попытался просмотреть библиотеку Core Foundation (которую я использую для получения пути myApp.app), но ничего не могу найти.

Ответы [ 3 ]

11 голосов
/ 04 марта 2011

Правильный способ сделать это в C / C ++:

#include <CoreServices/CoreServices.h>

FSRef ref;
OSType folderType = kApplicationSupportFolderType;
char path[PATH_MAX];

FSFindFolder( kUserDomain, folderType, kCreateFolder, &ref );

FSRefMakePath( &ref, (UInt8*)&path, PATH_MAX );

// You now have ~/Library/Application Support stored in 'path'

Естественно, это очень старые API, и Apple больше не рекомендует их использовать. Несмотря на это, он выполняет свою работу, если вы хотите полностью избежать Objective-C в своей кодовой базе.

3 голосов
/ 26 февраля 2011

Похоже, что для этой функции используется NSSearchPathForDirectoriesInDomains (или некоторые другие функции, перечисленные на той же странице) с NSApplicationSupportDirectory в качестве аргумента.

2 голосов
/ 04 марта 2011

В BSD Unix, включенном в OS-X, вы можете получить домашний каталог пользователя, запустившего программу, с этим:

struct passwd *p = getpwuid(getuid());  /* defined in pwd.h, and requires sys/types.h */ 
char *home = p->pw_dir;

Используя это, вы можете затем построить путь, используя это вместо ~

char *my_app_name = "WHATEVER";
char app_support[MAXPATHLEN];  /* defined in sys/param.h */
snprintf(app_support,MAXPATHLEN,"%s/Library/Application Support/%s", home, my_app_name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...