あるディレクトリにあるファイルを列挙する
バージョン 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