2014-06-11 88 views
2

我想访问应用程序包中资源内的文件。不幸的是我不能使用QT resorces,因为我使用opencv中的CascadeClassifier。我现在的路径在mac osx应用程序包中访问资源文件夹中的文件

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 
} 

我很感激这个问题的任何帮助

回答

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Ë CFRelease(filePathRef)函数检索到的物品;

从文件的路径,我们可以得到一个char *的路径: -

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

所以,把他们放在一起,如果你想获得一个char *路径haarcascade_mcs_eyepair_big.xml: -

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); 
+1

工作就像一个魅力 – CucumisSativus

相关问题