c - SDL2 Mac 文件处理

标签 c xcode macos file-handling sdl-2

我在 Mac 上通过 SDL2 访问文件时遇到了一个奇怪的问题。我在 OS X Mountain Lion 上使用 XCode 4,并且使用 SDL2 作为框架。我不是从源代码编译 SDL2。我已经将框架添加到包中,以及我需要加载的文件。该程序在 XCode 中构建并运行良好,但文件不会在编辑器外部加载(即,如果我双击独立的 .app,文件不会加载)。这是我的 .app 包的样子:

MyApp.app/
    Contents/
        Frameworks/
            SDL2.framework/
        MacOS/
            MyApp
        Resources/
            Configure.txt
            MyBMP.bmp
        Info.plist
        PkgInfo

在我的 C 代码中,我尝试这样做:

SDL_LoadBMP("MyApp.app/Contents/Resources/MyBMP.bmp");

不仅如此:

SDL_LoadBMP("MyBMP.bmp");

以及几乎所有介于两者之间的东西。 我还尝试通过以下方式访问文本文件:

FILE* data = fopen("MyApp.app/Contents/Resources/Configure.txt", "r");

FILE* data = fopen("Configure.txt", "r");

没有成功。 在 XCode 编辑器中,只有长的绝对路径有效,而我尝试过的任何东西在独立的 .app 中都不起作用。

其他人是否遇到了这个问题?我在使用 SDL 1.2 时加载了文件,但由于某种原因似乎没有加载 SDL2。 SDL2 是否在初始化期间对事件目录做了一些奇怪的事情?

------------编辑 1------------ 我最近尝试使用这段代码弄清楚发生了什么:

#include "SDL2/SDL.h"
#include "stdio.h"
#include "stdlib.h"

int main (int argc, char** argv){
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
         return EXIT_FAILURE;

    FILE* test = fopen("Test.txt", "w");

    if (!test) 
        return EXIT_FAILURE;

    fprintf(test, "Let's see where this ends up...");
    fclose(test);
    return EXIT_SUCCESS;

    //The rest of my code, which shouldn't ever come into play...
}

当从 XCode 4 编辑器运行时,这会按预期工作。在 Debug 文件夹中,就在我的 .app 文件旁边,有一个 Test.txt 文件,其中包含短语“让我们看看它在哪里结束......”。但是,当通过单击独立应用程序运行时,程序立即结束并且找不到文本文件。我检查了日志,它只是说程序以代码 1 退出。通过更彻底的分析,似乎 fopen() 失败了。有谁知道可能发生的事情吗?

最佳答案

您可以使用以下方法将工作目录设置为应用程序包中的 Resources 目录:

#include "CoreFoundation/CoreFoundation.h"

char path[PATH_MAX];
CFURLRef res = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
CFURLGetFileSystemRepresentation(res, TRUE, (UInt8 *)path, PATH_MAX)
CFRelease(res);
chdir(path);

您可能希望在 #ifdef __APPLE__#endif 之间换行以实现跨平台兼容性。

关于c - SDL2 Mac 文件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690800/

相关文章:

c++ - 如何在 Mac OS X 上从命令行进行分析?

c++ - printf - 奇怪的类型混搭结果。有人可以解释一下吗?

c - 指向 C 中重新分配的内存块的多个指针

iphone - 遍历 View : Objective-c 中的特定类

python - Mac OS X - 环境错误 : mysql_config not found

c - 使用 NULL 终止符和定界符拆分 char 数组的最佳方法?

ios - 无法在 swift 中获得回调?

swift - 使用 AVPlayer 的直播无法在 iOS 11 中播放

C,段错误(核心转储),Linux。我能做些什么?

c++ - Boost ASIO SSL 握手失败