这是一个图片文件检索函数,对于初学者来说实在难懂,能给说说,函数中的两个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;
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;
FindFirst 返回 0 表示找到第一个文件。
SearchRec.Attr and faDirectory = 0 是且操作,表示 Attr 中含有 faDirectory($00000010) 这个值。