以前にC++Builder用に書いた「TDirectory::GetFilesでファイルの一覧を取得する」のDelphi版です。
System.IOUtilsユニットのTDirectory.GetFilesは、指定のディレクトリ内のファイルのリストを返します。
(TDirectory.GetFilesはDelphi 2010/C++Builder 2010で追加された機能です。)
第一引数のPathでファイルを列挙したいディレクトリのパスを指定します。
第二引数のSearchPatternでフィルタリングします。
第三引数のOptionでサブディレクトリも検索するかどうかを指定します。
Pathは必須の引数です。SearchPatternとOptionはオプションです。
uses System.IOUtils, System.Types;
var
Path: string;
SearchPattern: string;
Option: TSearchOption;
FileNames: TStringDynArray;
FileName: string;
begin
// ファイルを列挙したいディレクトリのパス
Path := Edit1.Text;
// ファイル名に一致する検索パターン
SearchPattern := '*.txt';
// ディレクトリの列挙モード
Option := TSearchOption.soTopDirectoryOnly; // トップレベル列挙モード
// Option := TSearchOption.soAllDirectories; // 再帰列挙モード
//指定のディレクトリ内のファイルのリスト
FileNames := TDirectory.GetFiles(Path, SearchPattern, Option);
for FileName in FileNames do
begin
ListBox1.Items.Add(FileName);
end;
end;
フィルタリングをより細かく指定したい時には、TDirectory::TFilterPredicate型を引数に使用します。
var
Path: string;
SearchPattern: string;
Option: TSearchOption;
FileNames: TStringDynArray;
FileName: string;
Filter: TDirectory.TFilterPredicate;
begin
// ファイルを列挙したいディレクトリのパス
Path := Edit1.Text;
// ファイル名に一致する検索パターン
SearchPattern := '*.txt';
// ディレクトリの列挙モード
Option := TSearchOption.soTopDirectoryOnly; // トップレベル列挙モード
// Option := TSearchOption.soAllDirectories; // 再帰列挙モード
//望まない結果を除去するために使われるルーチン
Filter := function(const Path: string; const SearchRec: TSearchRec): Boolean
begin
Result := Length(SearchRec.Name) > 5; //5文字以上のファイルのみ
end;
//指定のディレクトリ内のファイルのリスト
FileNames := TDirectory.GetFiles(Path, SearchPattern, Option, Filter);
for FileName in FileNames do
begin
ListBox1.Items.Add(FileName);
end;