Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调查结果~/“图书馆/应用程序支持”;来自C++;?_C++_Macos - Fatal编程技术网

C++ 调查结果~/“图书馆/应用程序支持”;来自C++;?

C++ 调查结果~/“图书馆/应用程序支持”;来自C++;?,c++,macos,C++,Macos,我已经编写了一个GTKmm应用程序,我正在尝试创建一些OS X增强功能。我想将配置文件存储在Application Support/myApp文件夹中,但是,我无法找到找到此文件夹的正确方法 我曾尝试浏览核心基础库(我正在使用它来获取MyApp.App路径),但我找不到任何东西。 < P>看来,使用的函数是(或在同一页上列出的一些其他函数)以 NSApplicationSupportDirectory 为参数。您可以使用以下命令获取运行程序的用户的主目录: struct passwd *p =

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


我曾尝试浏览核心基础库(我正在使用它来获取MyApp.App路径),但我找不到任何东西。

< P>看来,使用的函数是(或在同一页上列出的一些其他函数)以<代码> NSApplicationSupportDirectory <代码>为参数。您可以使用以下命令获取运行程序的用户的主目录:

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

在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'
#包括
FSRef;
OSType folderType=kApplicationSupportFolderType;
字符路径[path_MAX];
FSFindFolder(kUserDomain、folderType、kCreateFolder和ref);
FSRefMakePath(&ref,(UInt8*)&path,path_MAX);
//现在,您的~/Library/Application支持存储在“path”中

当然,这些都是非常古老的API,苹果不再推荐使用它们。尽管如此,如果您想在代码库中完全避免使用Objective-C,它还是完成了任务。

您可以使用C函数getenv:
char*home=getenv(“home”)


并获得C++字符串使用:字符串(home)

是的,但我不能计算如何在C++中使用。可可.h文件是用Obj-C编写的,所以我不能把它包含在我的C++应用程序中。@鲍比:你能写一个包含API的目标C文件吗?看起来确实有一个碳当量函数,
FindFolder
,但它被标记为遗留()在这里的一个答案中有一个包装器:#include,我不得不使用PATH_MAX而不是MAX_PATH。但该API被视为不推荐使用。你将无法将你的应用程序放入Mac app store。改用Objective-C++包装器。@AlexanderShishenko:也许你混淆了不推荐的API和私有API?顺便说一句,苹果不会因为你使用了不推荐的API(他们自己)而拒绝你的应用程序,但是如果你使用了未记录的/私有的API,他们可能会拒绝你的应用程序。Xcode 11上编译失败:“FSFindFolder”已被弃用:macOS 10.8Apple建议不要硬编码
~/Library/Application Support/
路径。首先,它不能在较新的操作系统中使用应用程序沙盒。@Aeyoun-您是否有一个链接,指向获得此路径的建议内容?好的解决方案是一个Objective-C包装器,就像这里推荐的那样:(wrapper-around(NSURL*)applicationDataDirectory from)