Поиск "~/Library/Application Support" из С++?

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

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

Ответ 1

Правильный способ сделать это в 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 в своей кодовой базе.

Ответ 2

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

Ответ 3

В 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);