2011-10-03 45 views
0

我在應用程序捆綁中從終端或雙擊它時遇到了一些麻煩。「App Bundle」在哪裏查找我的媒體文件夾?從Qt Creator運行應用程序時發現的文件夾,使用終端時「找不到文件」

此應用程序實際上編譯,鏈接和完美運行在Qt Creator IDE中。但是,如果我嘗試從終端打開它,則會出現「media/file.x文件未找到」錯誤。應用程序包和/ Contents/MacOS /可執行文件都找到應該在可執行文件旁邊的「媒體」文件夾。

在我的應用我做這樣的事情:

openFile("media/file.x"); 

在Windows和Linux,如果「媒體」文件夾恰恰是在可執行文件的同一層次的位置(旁邊)這個文件會被發現。在Mac上,我發現它的工作方式不同,因爲Qt Creator構建了一個「應用程序包」,而實際的可執行文件位於/ Contents/MacOS文件夾內,因此我手動將「媒體」複製到了那裏。當從Qt Creator中「播放」我的應用程序時,這種方式沒有任何麻煩,但是如前所述,它在運行包本身時不起作用。

因此,有誰知道我在哪裏或如何均勻化這個「媒體」文件夾的外觀,因此它適用於:Qt Creator和應用程序包?

最近,我一直在使用以下命令來「安裝」該文件夾上的文件夾。

mac { 
    MediaFiles.files = media 
    MediaFiles.path = Contents/MacOS 
    QMAKE_BUNDLE_DATA += MediaFiles 
} 

感謝您的幫助。

回答

0

找了幾天後,我發現了一些討論相對路徑問題的帖子。我只是不正確的話搜索...答案顯示在:

Relative Paths Not Working in Xcode C++

http://www.experimentgarden.com/2009/06/how-to-load-resource-from-your.html

基本上有必要補充一點:

//On the include part 
#ifdef __APPLE__ 
#include "CoreFoundation/CoreFoundation.h" 
#endif 


// On the main of your app 
// This makes relative paths work in C++ in Xcode by changing directory to the Resources   folder inside the .app bundle 
#ifdef __APPLE__  
    CFBundleRef mainBundle = CFBundleGetMainBundle(); 
    CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle); 
    char path[PATH_MAX]; 
    if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)) 
    { 
     // error! 
    } 
    CFRelease(resourcesURL); 

    chdir(path); 
    std::cout << "Current Path: " << path << std::endl; 
#endif 
// ---------------------------------------------------------------------------- 

重要: 該chdir,改變了應用程序的工作路徑,所以它沒有必要改變你的相對代碼之後...

相關問題