从C ++中找到“〜/ Library / Application Support”?

时间:2011-02-25 22:22:31

标签: c++ macos

我编写了一个GTKmm应用程序,我正在尝试创建一些OS X增强功能。我想将我的配置文件存储在Application Support / myApp文件夹中,但是,我找不到找到此文件夹的正确方法。

我已经尝试查看Core Foundation库(我用来获取myApp.app路径)但我找不到任何东西。

4 个答案:

答案 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");