我想访问应用包中的Resources内部的文件。不幸的是我不能使用QT resorces,因为我正在使用opencv的CascadeClassifier。我目前的路径是
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
}
感谢您对此问题的任何帮助
答案 0 :(得分:5)
你没有说你想对这些文件做什么,但这可能是由于我对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,您可以使用Apple's documentation从中获取所需内容。
例如,如果您需要文件路径: -
CFStringRef filePathRef = CFURLCopyPath(appUrlRef);
//始终释放使用"create or "copy" in its nam e函数检索的项目 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);