Как я могу найти путь к файлу в комплекте приложений (NSBundle), используя C? - PullRequest
7 голосов
/ 07 января 2012

Существует ли C API для поиска пути к файлу в комплекте приложений?

Я знаю, что это можно сделать в Objective-C со следующим синтаксисом.

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

Есть ли соответствующая функция, которую я также могу вызывать из кода C или C ++?

Ответы [ 2 ]

9 голосов
/ 07 января 2012

После Майк К указал мне в правильном направлении , я смог получить путь к файлу в комплекте приложений со следующим кодом.

// 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);

Кажется, это немного дольше, чем нужно, но, по крайней мере, это работает!

6 голосов
/ 07 января 2012

вы можете получить основной пакет через:

CFBundleRef mainBundle = CFBundleGetMainBundle();

полную информацию здесь:

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

...