objective-c - 在 C 代码中检索应用程序支持目录(及其他目录)

标签 objective-c c macos

我需要从 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/

相关文章:

c - 如何将数组结构传递给函数?

node.js - Electron Node -Gyp 库未加载 : dylib

mysql - 错误 1045 (28000) : Access denied for user 'root' @'localhost' (using password: NO) on MAC OSX

objective-c - 如何在UIWebView中跳转pdf页面?

IOS,如何创建一个像这样的中心选项卡式可滚动 TableView

objective-c - 使用 CIImage 使所有黑色像素透明

c - 如果有人正在等待共享信号量,如何检查 C Posix 线程?

c - 跨内核的纳秒计时?

python - 导入错误 : No module named PyQt5 - OSX Mavericks

ios - 如何实现ViewController里面有CollectionView?