char* SDL_GetBasePath(void)
アプリケーションデータディレクトリのUTF-8の絶対パス名を戻す. 失敗またはこの関数が実装されていない環境の場合NULLを戻す. SDL_GetError()で詳細を知ることができる.
char *data_path = NULL;
void InitializeDataPath() {
char *base_path = SDL_GetBasePath();
if (base_path) {
data_path = base_path;
} else {
data_path = SDL_strdup("./");
}
}
この関数は高速である必要はないはずだ. それでも速さが必要ならば, 最初に呼んだときに文字列を保存する必要がある.
Mac OS XとiOSの特別な仕様: アプリケーションが".app"バンドルされていれば, この関数はリソースディレクトリ(例: MyApp.app/Contents/Resources/)を戻す. この動作はInfo.plistにプロパティを追加して上書きできる. SDL_FILESYSTEM_BASE_DIR_TYPE 文字列キーに値を追加すると動作を変えられる.
SDL_FILESYSTEM_BASE_DIR_TYPE プロパティの値 (アプリケーションは /Applications/SDLApp/MyApp.app にあるとする):
値 | 説明 | 例 |
---|---|---|
resource | バンドルされたリソースディレクトリ (デフォルト) | /Applications/SDLApp/MyApp.app/Contents/Resources |
bundle | バンドルディレクトリ | /Applications/SDLApp/MyApp.app/ |
parent | バンドルディレクトリのあるディレクトリ | /Applications/SDLApp/ |
ニンテンドーDSの特別な仕様: 実行ファイルの外部にリソースを置くことが一般的でないため, この関数はアプリケーションの"romfs"ディレクトリを戻す. このディレクトリは書き込み不可である.
戻されたパスは最後が区切り記号(Windowsなら'¥', 他の環境なら'/')で終わっていることが保障されている.
このポインタの管理はプログラマが行う. 使い終わったらSDL_free()を呼ぶ必要がある.