ディレクトリのファイルを列挙する
|
以下のようにするのが定石です。
ポイントは,
2バイト文字の2バイト目に '\' が来る可能性を考慮する
-> IsPathDelimiter 関数
FindFirst が成功したときのみ FindClose を呼ぶ。
-> [Delphi-ML:17508]
repeat until を使うとループがスマートに書ける
'.' や '..' といった特殊ディレクトリも列挙される
といったところです。
SearchRec.FindData には見つかったファイルに関するさらに多くの情報が詰まっています。ヘルプを参照しましょう。
procedure Form1.EnumFiles(DirectoryName: string);
var
SearchRec: TSearchRec;
begin
// 一番後ろに '\' がついていなければ付ける
DirectoryName:= IncludeTrailingBackslash(DirectoryName);
// FindFirst が成功した場合のみ FindClose を呼ぶ必要がある
if 0=FindFirst(DirectoryName+'*.*', faAnyFile, SearchRec) then try
repeat
if SearchRec.Attr and faDirectory <> 0 then begin
// カレントディレクトリや親ディレクトリをスキップ
if (SearchRec.Name='.') and (SearchRec.Name='..') then
Continue;
// ディレクトリに対する処理
// SearchRec.Name にディレクトリ名が入っている
// たとえば、Memo1.Lines.Add('Dir :'+DirectoryName+SearchRec.Name);
end else begin
// ファイルに対する処理
// SearchRec.Name にファイル名が入っている
// たとえば、Memo1.Lines.Add('File:'+DirectoryName+SearchRec.Name);
end;
until 0<>FindNext(SearchRec);
finally
FindClose(SearchRec);
end;
end;
|
|