如何使用C找到应用程序包(NSBundle)中文件的路径?

时间:2012-01-07 07:52:53

标签: c macos core-foundation nsbundle

是否有用于查找应用程序包中文件路径的C API?

我知道这可以在Objective-C中使用以下语法完成。

NSString *path = [[NSBundle mainBundle] pathForResource:@"MyImage" ofType:@"bmp"];

我是否可以通过C或C ++代码调用相应的函数?

2 个答案:

答案 0 :(得分:9)

Mike K pointed me in the right direction之后,我能够使用以下代码检索应用程序包中文件的路径。

// Get a reference to the main bundle
CFBundleRef mainBundle = CFBundleGetMainBundle();

// Get a reference to the file's URL
CFURLRef imageURL = CFBundleCopyResourceURL(mainBundle, CFSTR("MyImage"), CFSTR("bmp"), NULL);

// Convert the URL reference into a string reference
CFStringRef imagePath = CFURLCopyFileSystemPath(imageURL, kCFURLPOSIXPathStyle);

// Get the system encoding method
CFStringEncoding encodingMethod = CFStringGetSystemEncoding();

// Convert the string reference into a C string
const char *path = CFStringGetCStringPtr(imagePath, encodingMethod);

fprintf(stderr, "File is located at %s\n", path);

这似乎比它需要的时间长一点,但至少它有效!

答案 1 :(得分:6)

你可以通过以下方式获得主要包裹:

CFBundleRef mainBundle = CFBundleGetMainBundle();

此处的详细信息:

http://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFBundles/AccessingaBundlesContents/AccessingaBundlesContents.html