У меня возникла странная проблема с доступом к файлам через SDL2 на Mac. Я использую XCode 4 в OS X Mountain Lion, и я использую SDL2 в качестве рамки. Я НЕ компилирую SDL2 из источника. Я добавил фреймворк к набору, а также файлы, которые мне нужно загрузить. Программа строит и отлично работает с XCode, но файлы не загружаются за пределы редактора (I.Е., если я дважды щелкните автономный файл .app, файлы не загружаются). Вот что мой .app пакет выглядит следующим образом:SDL2 Mac Обработка файлов
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 делает что-то странное с активным каталогом во время инициализации?
------------- EDIT 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()
не работает. Кто-нибудь имеет представление о том, что может происходить?
Просто дикий удар в темноте, но вы пробовали: 'FILE * данные = Еореп ("../ Resources/Configure.txt", "г");' – Zammalad
@ Zammalad Я пробовал это, и это не сработало. Я обновлю вопрос с недавними открытиями. – BrainSteel