我需要從C代碼中獲得應用程序支持目錄(所以我不相信我可以使用NSSearchPathForDirectoriesInDomains()和類似的)。有沒有辦法做到這一點,除了硬編碼路徑(以便它可以考慮諸如沙盒之類的東西)?在C代碼中檢索應用程序支持目錄(和其他)
0
A
回答
1
儘管NSSearchPathForDirectoriesInDomains()
是一個C函數,但它使用涉及自動釋放緩衝池的Foundation調用,因此您不能從純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將提供路徑。
1
的Objective-C是C.兼容,所以你可以簡單地換您的來電NSSearchPathForDirectoriesInDomains()
一個簡單的C函數中,並有 返回一個const char *從您的其他(非可可兼容) C代碼中訪問。不過,您必須鏈接到相應的OSX庫。
相關問題
- 1. 寫入應用程序支持目錄
- 2. 將其他應用程序的支持從Java應用程序中刪除
- 3. 在應用程序支持或%appdata中創建目錄%
- 4. 在java中查找OSX上的應用程序支持目錄
- 5. 如何在其他課程中檢索用戶名和密碼?
- 6. 檢索由其他應用程序在Android中
- 7. 檢查其他應用程序使用NDK /支持庫/第三方庫或否
- 8. 保持Messagebox.show()在其他應用程序的頂部使用C#
- 9. Document4j支持其他ms字樣應用程序
- 10. VBA。從其他應用程序中檢索文本
- 11. 保存和檢索視頻及其縮略圖到應用程序的目錄
- 12. IPC與C++應用程序和其他應用程序之間的C + +和VB.Net
- 13. 在Android中檢索應用程序的版本代碼
- 14. C#使用其他代碼
- 15. 可支持Web應用程序(.NET C#)
- 16. 用C代碼構建Android應用程序是否有其他替代方法?
- 17. 如何檢查用戶是否在Django模板中支持'或其他'支持?
- 18. Django應用程序檢索其他應用程序模型的數據?
- 19. 在Swift應用程序中支付給其他用戶
- 20. 找不到應用程序支持目錄
- 21. iOS應用程序支持更新時覆蓋目錄文件?
- 22. 檢查程序,如果編碼支持
- 23. Nativescript檢測其他應用程序
- 24. 在Mono應用程序中支持Applescripting
- 25. 從應用程序目錄中檢索文檔
- 26. Chrome擴展程序不支持代碼?
- 27. 僅需要Web應用程序的代碼才能支持HSTS?
- 28. 應用程序代碼只支持一種文件嗎?
- 29. 支持包的應用程序代碼不完整
- 30. 在Android應用程序項目中包含其他Eclipse項目
謝謝你。我現在有點瘋狂得到這個編譯。我添加了Foundation.framework(並且嘗試了Cocoa.framework)以「鏈接Binary與庫」,但它仍然給我20錯誤,如: '預期的標識符或'(''和'未知的類型名稱'NSString' ' 任何幫助將不勝感激。 – livings124
請確保您的Cocoa源文件有一個* .m或* .mm文件名結尾。 –
啊,我在C文件中使用它。 – livings124