bool SDL_EnumerateStorageDirectory(SDL_Storage *storage, const char *path, SDL_EnumerateDirectoryCallback callback, void *userdata);
| SDL_Storage * | storage | ストレージコンテナ |
| const char * | path | 列挙するディレクトリのパス名. NULLのときルート |
| SDL_EnumerateDirectoryCallback | callback | ディレクトリ内の各項目に対して呼ばれる関数 |
| void * | userdata | callbackに渡すポインタ |
この関数はアプリケーションが渡したコールバックを通してディレクトリ内の各項目を提供する. コールバックは, 全ての項目を提供する, またはコールバックがSDL_ENUM_SUCCESSまたはSDL_ENUM_FAILUREを戻すまで, ディレクトリ内のそれぞれの項目につき1回ずつ呼ばれる.
この関数は, 一般的なシステムの問題が発生した, またはコールバックがSDL_ENUM_FAILUREを戻したとき, 偽を戻す. 成功は, コールバックが列挙を完了してSDL_ENUM_SUCCESSを戻した, またはディレクトリの全ての項目を列挙したことを意味する.
passがNULLの場合, ストレージコンテナのツリーのルートの列挙と見なされる.
空の文字列の場合も同様である.
storageオブジェクトがスレッドセーフとみなすことができれば, この関数はどのスレッドからも安全に呼べる.
// サンプルプログラム
// SDL3を利用してタイトルストレージ内の全てのディレクトリを列挙する
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
SDL_EnumerationResult
my_enumerate_dir_callback(void *userdata, const char* dirname, const char* fname)
{
SDL_Log("ディレクトリ名: %s | ファイル名: %s", dirname, fname);
return SDL_ENUM_CONTINUE;
}
int
main(int argc, char** argv)
{
SDL_Storage *storage = SDL_OpenTitleStorage("", 0);
if(storage == NULL) {
SDL_Log("ストレージのオープンに失敗した %s", SDL_GetError());
}
if(!SDL_EnumerateStorageDirectory(storage, NULL, my_enumerate_dir_callback, NULL)) {
SDL_Log("システムの問題が発生またはコールバックが失敗を示した");
} else {
SDL_Log("全てのディレクトリを列挙またはコールバックが列挙を中止した");
}
return 0;
}