我编写了一个GTKmm应用程序,我正在尝试创建一些OS X增强功能。我想将我的配置文件存储在Application Support / myApp文件夹中,但是,我找不到找到此文件夹的正确方法。
我已经尝试查看Core Foundation库(我用来获取myApp.app路径)但我找不到任何东西。
答案 0 :(得分:11)
在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,它仍然可以完成工作。
答案 1 :(得分:3)
看来,用于此的函数是NSSearchPathForDirectoriesInDomains(或同一页面上列出的其他一些函数),其中NSApplicationSupportDirectory
为参数。
答案 2 :(得分:2)
在OS-X中包含的BSD Unix中,您可以使用以下命令获取运行程序的用户的主目录:
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);
答案 3 :(得分:0)
这不是应用程序支持,但您可能不想在那里存储文件。而是使用您通过调用“HOME”获得的目录:
您可以使用 C 函数 getenv:Child_Category_Name (FK)
并获取 C++ 字符串使用:char *home = getenv("HOME");