C++BuilderのTDirectory::GetFilesでファイルの一覧を取得する

IOUtils.hppのTDirectory::GetFilesは、指定のディレクトリ内のファイルのリストを返します。
(TDirectory::GetFilesはDelphi 2010/C++Builder 2010で追加された機能です。)

Delphi版はこちらのページになります。

第一引数の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]);
}

コメント

  1. Pingback: DelphiのTDirectory::GetFilesでファイルの一覧を取得する - 山本隆の開発日誌

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です