以前のDelphiだと、FindFirst と FindClose は以下のように書く必要がありました。

var
  SRec: TSearchRec;
Found := FindFirst(FileOrFolder, Attributes, SRec);
if Found = 0 then
begin
  repeat
    ProcessFileOrFolder(SRec);
    Found := FindNext(SRec);
  until Found <> 0;
  FindClose(SRec); // 見つかったときのみ CLOSE
end;

参考) FDelphiサンプル蔵

しかし、Delphi 2009では、見つからなくても、FindClose した方が良さそうです。FindClose しない場合、USBのフラッシュメモリなどの取り出しに失敗してしまいました。

SysUtils の FindFirst の近くにあるコードに従って、以下のようなコードに書き換えたら、取り出し可能になりました。

var
  rec: TSearchRec;
begin
  Result := 0;
  if FindFirst(filename, faAnyFile, rec) = 0 then
  begin
    // 検索に成功した時の処理
  end;
  FindClose(rec);
end;

また、上記の場合、Exit で関数を抜けてしまったときなど、FindClose を忘れてしまいますから、明示的に、try .. finally .. end で括った方が閉じ忘れが無くなると思います。

var
  rec: TSearchRec;
  i: Integer;
begin
  Result := 0;
  i := FindFirst(filename, faAnyFile, rec);
  try
    if i = 0 then
    begin
      // 検索に成功した時の処理
    end;
  finally
    FindClose(rec);
  end;
end;