はじめまして。
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;
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;
投げやりサンプル さん、どうもありがとうございます。
サンプルに沿って自分なりに改造した結果、
想定通りの結果が得られました。
改めて感謝致します。
ツイート | ![]() |