我需要从 C 代码中获取应用程序支持目录(所以我不相信我可以使用 NSSearchPathForDirectoriesInDomains() 和类似的)。除了对路径进行硬编码(以便它可以考虑沙箱等因素)之外,还有其他方法可以做到这一点吗?
最佳答案
虽然 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 可以提供路径。
关于objective-c - 在 C 代码中检索应用程序支持目录(及其他目录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8958136/