这是一个图片文件检索函数,对于初学者来说实在难懂,能给说说,函数中的两个if语句下分别是什么功能吗?
function FindFile(const filespec: TFileName;attributes: integer): TStringList;
var
  spec: string;
  list: TStringList;
    //------------------查询下级目录的子过程
  
procedure RFindFile(const folder: TFileName);
  var
    SearchRec: TSearchRec;
  begin
    
if FindFirst(folder + spec, attributes, SearchRec)=0 then
    begin
      try
        repeat
          if (SearchRec.Attr and faDirectory = 0) or
          (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
            list.Add(folder + SearchRec.Name);
        until FindNext(SearchRec) <> 0;
      except
        FindClose(SearchRec);
        raise;
      end;
    FindClose(SearchRec);
    end;
    
if FindFirst(folder + '*', attributes Or faDirectory, SearchRec) = 0 then
    begin
      try
        repeat
        if ((SearchRec.Attr and faDirectory) <> 0) and
         (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
          RFindFile(folder + SearchRec.Name + '\');
        until FindNext(SearchRec) <> 0;
      except
        FindClose(SearchRec);
        raise;
      end;
      FindClose(SearchRec);
    end;
  end;
    //------------------
begin
  list := TStringList.Create;//创建字符传列表
  try
    spec := ExtractFileName(filespec);//返回指定文件名
    RFindFile(ExtractFilePath(filespec));//返回指定路径
    Result := list;
  except
    list.Free;
    raise;
  end;
end;

解决方案 »

  1.   

    FindFirst就是查找第一个文件,如果有,则继续查找其他的
      

  2.   

    第一个if就是在指定的目录下查找指定的文件是否存在,第二个if是递归查找指定目录下的所有子目录。两个连起来就实现了在指定目录下的所有子目录内查找指定的文件是否存在~这代码写的确实费劲
      

  3.   

    微软的很多 API 返回 0 表示“成功”
    FindFirst 返回 0 表示找到第一个文件。
    SearchRec.Attr and faDirectory = 0 是且操作,表示 Attr 中含有 faDirectory($00000010) 这个值。