我需要从C代码中获取Application Support目录(所以我不相信我可以使用NSSearchPathForDirectoriesInDomains()等)。除了硬编码路径之外还有办法做到这一点(这样它可以考虑诸如沙盒之类的东西)吗?
答案 0 :(得分:1)
Objective-C与C兼容。所以你可以简单地将你的调用包含在一个简单的C函数中NSSearchPathForDirectoriesInDomains()
返回一个const char *来从你的另一个中访问它(非Cocoa兼容)
C代码。但是,您必须链接到相应的OSX库。
答案 1 :(得分:1)
虽然NSSearchPathForDirectoriesInDomains()
是C函数,但它使用涉及自动释放池的Foundation调用,因此您无法从纯C代码调用它(嗯,您可以,但它会发出池泄漏警告)。所以简约的方法是创建一个小的包装器Obj-C文件:
#include <Foundation/Foundation.h>
CFArrayRef appSupport() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CFArrayRef a = (CFArrayRef) NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory ,NSUserDomainMask, YES);
CFRetain(a);
[pool release];
return a;
}
然后你可以用纯C来处理其余部分,例如:
CFArrayRef a = appSupport();
if (CFArrayGetCount(a) > 0) { /* let's get the first value */
CFStringRef s = CFArrayGetValueAtIndex(a, 0);
char path[PATH_MAX];
CFStringGetFileSystemRepresentation(s, path, sizeof(path));
/* path now has what you want */
}
CFRelease(a);
我不知道任何可以提供路径的直接CF API。