ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

あるディレクトリにあるファイルを列挙する

バージョン 4.0 以降

あるディレクトリにあるファイルを列挙するには、ファイル列挙子と
ディレクトリ列挙子を使用します。

SFXDirectory::Enumerator etor;

// ファイル列挙子の取得
SFXDirectory::GetFileEnumerator(SFXPath("/dir1/"), &etor);
// SFXDirectory::GetDirectoryEnumerator でディレクトリ列挙子の取得

// ファイルの情報を取得する
while (etor.HasNext()) {
    // path にはファイル名が入る
    SFXPath path = etor.GetNext();

}

サブディレクトリも列挙する場合は以下のような再帰関数を定義します。

Void EnumerateDirectory(SFXPath path) {
    SFXDirectory::Enumerator etor;

    // ファイル列挙子の取得
    SFXDirectory::GetFileEnumerator(path, &etor);

    while (etor.HasNext()) { // 各ファイルについて
        // filename にはファイル名が入る
        SFXPath filename = etor.GetNext();

    }

    // ディレクトリ列挙子の取得
    SFXDirectory::GetDirectoryEnumerator(path, &etor);

    while (etor.HasNext()) { // 各ディレクトリについて
        EnumerateDirectory(etor.GetNext());

    }
}

使用例

EnumerateDirectory(SFXPath("/dir1/"));  // dir1 以下のすべてのファイルを列挙

バージョン 3.0

あるディレクトリにあるファイルを列挙するには、SFBFileMgr::EnumInit 関数と
SFBFileMgr::EnumNext 関数を使用します。

SFBFileMgrSmp fileMgr = SFBFileMgr::NewInstance();
FileInfo info = {0};

// dir1/ ディレクトリのファイルを列挙するための初期化を行う
// 2つめの引数は false ならファイル列挙、true ならディレクトリ列挙
if (fileMgr->EnumInit("/dir1/", false) == SFERR_NO_ERROR) {

    // ファイルの情報を取得する
    while (fileMgr->EnumNext(&info)) {
        // fileName にはファイル名が入る
        SFXAnsiString fileName = info.szName;

    }
}

サブディレクトリも列挙する場合は以下のような再帰関数を定義します。

Void EnumerateDirectory(SFXAnsiString dir_name) {
    SFBFileMgrSmp   fileMgr = SFBFileMgr::NewInstance();
    FileInfo        info    = {0};

    // ファイルを列挙するための初期化を行う
    if (fileMgr->EnumInit(dir_name, false) == SFERR_NO_ERROR) {

        // 次のファイルの情報を取得する
        while (fileMgr->EnumNext(&info)) {
            // fileName にはファイル名が入る
            SFXAnsiString fileName = info.szName;

        }
    }

    // ディレクトリを列挙するための初期化を行う
    if (fileMgr->EnumInit(dir_name, true) == SFERR_NO_ERROR) {

        // 次のディレクトリの情報を取得する
        while (fileMgr->EnumNext(&info)) {
            // fileName にはディレクトリ名が入る
            SFXAnsiString dirName = info.szName;

            // 再帰呼び出し
            EnumerateDirectory(dirName);
        }
    }
}

使用例

EnumerateDirectory("/dir1/");  // dir1 以下のすべてのファイルを列挙

参照 SFXDirectory::GetFileEnumerator | SFXDirectory::GetDirectoryEnumerator |
SFBFileMgr::EnumInit | SFBFileMgr::EnumNext