在Mac OSX应用程序包中访问资源文件

3

我希望能够访问应用程序包中“资源”文件夹中的文件。不幸的是,由于我正在使用opencv的CascadeClassifier,因此无法使用QT资源。我的当前路径为

const std::string FACE_CLASIFIER_PATH = "/Resources/haarcascade_frontalface_default.xml";
const std::string EYES_CLASIFIER_PATH = "/Resources/haarcascade_mcs_eyepair_big.xml";

我也尝试过

const std::string FACE_CLASIFIER_PATH = "../Resources/haarcascade_frontalface_default.xml";
const std::string EYES_CLASIFIER_PATH = "../Resources/haarcascade_mcs_eyepair_big.xml";

但是两者都不起作用。关于配置,这两个文件都位于MyApp.app/Contents/Resources中,我使用qmake将它们包含进来。
mac {
APP_XML_FILES.files = ../haarcascade_frontalface_default.xml ../haarcascade_mcs_eyepair_big.xml
APP_XML_FILES.path = Contents/Resources
QMAKE_BUNDLE_DATA += APP_XML_FILES
}

我需要针对这个问题寻求帮助。
1个回答

7

虽然这可能是由于我对opencv的了解不足,但您没有说明您想如何处理这些文件。但是,您可以使用Core Foundation类来获取资源文件夹中文件的路径:

-

CFURLRef appUrlRef;
appUrlRef = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("somefile"), NULL, NULL);

// do something with the file
//...

// Ensure you release the reference
CFRelease(appUrlRef);

使用 CFURLRef,您可以使用 苹果文档 获取所需的内容。

例如,如果您想要一个文件路径:-

CFStringRef filePathRef = CFURLCopyPath(appUrlRef);

//始终释放使用"create"或"copy"命名的函数检索到的项目 CFRelease(filePathRef);

从文件路径中,我们可以获取到路径的char*:

const char* filePath = CFStringGetCStringPtr(filePathRef, kCFStringEncodingUTF8);

因此,将所有内容放在一起,如果您想获得指向haarcascade_mcs_eyepair_big.xml的char*路径:

CFURLRef appUrlRef = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("haarcascade_mcs_eyepair_big.xml"), NULL, NULL);
CFStringRef filePathRef = CFURLCopyPath(appUrlRef);
const char* filePath = CFStringGetCStringPtr(filePathRef, kCFStringEncodingUTF8);

// Release references
CFRelease(filePathRef);
CFRelease(appUrlRef);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接