Delphi Tips 
-----------------------------

0274  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/09/24 osamu rev 1.3
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2001/05/14 jkaneko@fujita.co.jp 編集
ディレクトリのファイルを列挙する

以下のようにするのが定石です。
ポイントは,
  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;
参照: <ファイル>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp