gpt4 book ai didi

c - SDL2 Mac 文件处理

转载 作者:太空狗 更新时间:2023-10-29 15:36:00 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com