我想知道如何从C ++文件打开应用包中的文件。
即。我有一个文件“manifest.xml”,它开始被复制到应用程序包中。我需要一种从C ++到加载此文件的方法。我认为这将涉及在Obj-C代码中设置路径,以便文件位于工作目录中。
答案 0 :(得分:6)
您必须使用CoreFoundation(C)或Foundation(ObjC)。您可以使用CFBundle
/ NSBundle
函数访问应用包中的每个对象(“主要包”)。
在CoreFoundation中你做了(省略了NULL检查):
CFURLRef manifest_url = CFBundleCopyResourceURL(CFBundleGetMainBundle(),
CFSTR("manifest"), CFSTR("xml"),
NULL);
char manifest_path[1024];
CFURLGetFileSystemRepresentation(manifest_url, true,
manifest_path, sizeof(manifest_path));
CFRelease(manifest_url);
FILE* f = fopen(manifest_path, "r"); // etc.
在基金会,你做
NSString* manifest_string = [[NSBundle mainBundle] pathForResource:@"manifest"
ofType:@"xml"];
const char* manifest_path = [manifest_string fileSystemRepresentation];
FILE* f = fopen(manifest_path, "r"); // etc.
答案 1 :(得分:2)
OS X应用程序的核心是Unix应用程序。
应用程序如何找到其父目录并在Linux上打开文件?您可以在OS X上以相同的方式在C ++中执行此操作。
现在,如果你愿意做一些Cocoa或CoreFoundation调用,你可以让你的生活更轻松,但如果你的要求是只能使用C ++调用,那么任务就没有了任何其他Unix-sytle系统。