IOUtils.hppのTDirectory::GetFilesは、指定のディレクトリ内のファイルのリストを返します。
(TDirectory::GetFilesはDelphi 2010/C++Builder 2010で追加された機能です。)
第一引数のPathでファイルを列挙したいディレクトリのパスを指定します。
第二引数のSearchPatternでフィルタリングします。
第三引数のOptionでサブディレクトリも検索するかどうかを指定します。
Pathは必須の引数です。SearchPatternとOptionはオプションです。
#include <IOUtils.hpp>
//ファイルを列挙したいディレクトリのパス
UnicodeString Path = Edit1->Text;
//ファイル名に一致する検索パターン
UnicodeString SearchPattern = "*.txt";
//ディレクトリの列挙モード
TSearchOption Option = TSearchOption::soTopDirectoryOnly; //トップレベル列挙モード
//TSearchOption option = TSearchOption::soAllDirectories; //再帰列挙モード
TStringDynArray files = TDirectory::GetFiles(Path, SearchPattern, Option);
for (int i = 0; i < files.Length; ++i)
{
ListBox1->Items->Add(files[i]);
}
フィルタリングをより細かく指定したい時には、TDirectory::TFilterPredicateを継承したクラスのインスタンスを引数に使用します。
//望まない結果を除去するために使われるクラス
class TMyFilterPredicate : public TCppInterfacedObject<TDirectory::TFilterPredicate>
{
public:
bool __fastcall Invoke(const System::UnicodeString Path, const Sysutils::TSearchRec &SearchRec)
{
return (SearchRec.Name.Length() > 5); //5文字以上のファイルのみ
}
};
UnicodeString Path = Edit1->Text; //ファイルを列挙したいディレクトリのパス
UnicodeString SearchPattern = "*.txt"; //ファイル名に一致する検索パターン
// TSearchOption Option = TSearchOption::soTopDirectoryOnly; //トップレベル列挙モード
TSearchOption Option = TSearchOption::soAllDirectories; //再帰列挙モード
TMyFilterPredicate* Predicate = new TMyFilterPredicate(); //望まない結果を除去するために使われるルーチン
TStringDynArray files = TDirectory::GetFiles(Path, SearchPattern, Option, Predicate);
for (int i = 0; i < files.Length; ++i)
{
ListBox1->Items->Add(files[i]);
}
Pingback: DelphiのTDirectory::GetFilesでファイルの一覧を取得する - 山本隆の開発日誌