Поиск "~/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);