サブフォルダを含むファイルの検索

解決


あかね  2007-07-09 18:53:48  No: 26974

はじめまして。
CDドライブ内を検索し、".LZH"と".TXT"のフルパスを
配列に(Listではなく)  代入するという関数を作成しています。
過去ログを参考にしていたのですが、再起処理がうまくゆきません。
ご教授願いただけないでしょうか。

Var
  i         : Integer;
  Path      : String;
  SearchRec : TSearchRec;
  SearchRes : Integer;
  Attri     : Integer;
  gCD_FPath : array [0..9] of String;

begin
  i    := 0;
  Path := 'CDドライブ名';   //ドライブの先頭文字だけが入ります(例:F)

  SearchRes := FindFirst(Path + ':\' + '*.*', faAnyFile, SearchRec);
  try
    while SearchRes = 0 do begin
      Attri := SearchRec.Attr and faDirectory;

      if  (Attri = faDirectory) and (SearchRec.Name <> '.')
      and (SearchRec.Name <> '..') then
         //再起処理
      else
        //ヒットしたファイルを代入
        if (AnsiLowerCase(ExtractFileExt(SearchRec.Name)) = '.LZH') or
           (AnsiLowerCase(ExtractFileExt(SearchRec.Name)) = '.TXT') then
          gCD_FPath[i]:=Path + ':\' + SearchRec.Name;
          inc(i);
      SearchRes := FindNext(SearchRec);
    end;
  finally
    FindClose(SearchRec);
end;


投げやりサンプル  2007-07-10 01:28:23  No: 26975

procedure THogeForm.Button1Click(Sender: TObject);
var
  gCD_FPath: array [0..9] of String;
  i: Integer;

{検索}
procedure findFiles(aFolder  :String);
  var
    searchRec  :TSearchrec;
  begin
    {列挙開始}
    if FindFirst(aFolder + '\*', faAnyFile, searchRec) = 0 then begin
      //ここから〜
      if searchRec.Name[1] <> '.' then begin
  if (AnsiUpperCase(ExtractFileExt(searchRec.Name)) = '.LZH') or
     (AnsiUpperCase(ExtractFileExt(searchRec.Name)) = '.TXT') then begin
    gCD_FPath[i]:=aFolder + '\' + searchRec.Name;
    inc(i);
    if (searchRec.Attr AND faDirectory) > 0 then begin
      {再帰処理}
      findFiles(aFolder + '\' + searchRec.Name);
    end;
  end;
      end;
      //〜ここまで

      while (FindNext(searchRec) = 0) do begin
      //ここから〜

      //〜ここまで
      {と同じ
       ただし、i = 10で Break;}
      end;
      {終了}
      FindClose(searchRec);
    end;
  end;
begin
  findFiles('F:');
end;


あかね  2007-07-10 06:42:19  No: 26976

投げやりサンプル さん、どうもありがとうございます。

サンプルに沿って自分なりに改造した結果、
想定通りの結果が得られました。

改めて感謝致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加