目次 - API(機能別) - ファイルシステム - SDL_GetBasePath

# SDL_GetPrefPath

「プリファレンスディレクトリ」を得る. そこにアプリケーションは個人のファイル(設定やゲームの保存など)を書き込む. このディレクトリはユーザとアプリケーションごとに固有である.

## 構文

`char* SDL_GetPrefPath(const char* org, const char* app)`

## 引数

org | 組織名
app | アプリケーション名

## 戻り値

環境に依存した記述のユーザディレクトリのUTF-8文字列を戻す. 問題がある(ディレクトリの作成に失敗など)のときNULLを戻す.

## サンプルコード

``

    char *pref_path = NULL;

    void InitializePrefPath() {
        char *base_path = SDL_GetPrefPath("My Company", "My Awesome SDL 2 Game");
        if (base_path) {
            pref_path = base_path;
        } else {
            /* ゲームで情報を書かないようにする処理をここに書く */
        }
    }

## 詳細

これはユーザがどこにアプリケーション固有のファイル(設定やセーブデータ等)を書き込める場所を表している. このディレクトリは, アプリケーションごと, ユーザごとに異なる.

この関数はネイティブのファイルシステムにふさわしい場所を選択し, 必要ならばディレクトリを生成する. そして, UTF-8の絶対パスの文字列で戻す.

Windowsならば, 文字列は次のようになる: C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\

Linuxならば, 文字列は次のようになる: /home/bob/.local/share/My Program Name/

macOSならば, 文字列は次のようになる: /Users/bob/Library/Application Support/My Program Name/

この関数が戻した場所のみ安全にファイルを書き込めるとみなすべきである. (書き込めるであろうSDL_GetBasePath()やその親ディレクトリには書き込むべきでない.)

orgとappはディレクトリの名前の一部になる. 次のルールに従うべきである.

- この関数を使う全てのアプリケーションは, (大文字小文字も)同じorgを使う.
- アプリケーションごとに違うappを使う. 一度決めたappは変更しない.
- UTF-8でエンコードする限りUnicodeは使える. しかし...
- ...使うのはアルファベット, 数字, 空白のみにする. "Game Name 2: Bad Guy's Revenge!" のように記号を含めるのは避ける. "Game Name 2" で十分である.

パス名の末尾には, パスの区切り文字(Windowsならば'\', 他の環境ならば'/')があることが保障されている.

戻されたポインタはアプリケーションが管理する必要がある. 使った後はポインタに対してSDL_free()を呼ぶこと.

## バージョン

SDL 2.0.1以降

## 関連項目(関数)

SDL_GetBasePath

## SDL Wikiへのリンク

SDL_GetPrefPath - SDL Wiki