procedure  FindFiles(filename: Pchar);
var
  a: _WIN32_FIND_DATA;
  b: longint;
  temp: String;
begin
  temp :=  filename;
  b :=  FindFirstFile(Pchar(Filename +'\*.*'),a);
  if (Trim(a.cFileName)<> '.')and(Trim(a.cFileName)<>'..')and(Trim(a.cFileName)<>'')  then
  begin
    if Trim(a.cFileName) = Trim(Form1.Edit2.Text) then
    begin
      Inc(Form1.FileCount);
      Form1.Memo1.Lines.Add(temp+'\'+a.cFileName);
    end;
  end;
  while  FindNextFile(b,a) = True do
  begin
    if (Trim(a.cFileName)<>'.')and(Trim(a.cFileName)<> '..')and(Trim(a.cFileName)<> '') then
    begin
      if Trim(a.cFileName) = Trim(Form1.Edit2.Text) then
      begin
        Inc(Form1.FileCount);
        Form1.Memo1.Lines.Add(temp+'\'+a.cFileName);
      end;
    end;
    if ((a.dwFileAttributes=49)or(a.dwFileAttributes=48)or(a.dwFileAttributes=16))and(Trim(a.cFileName)<> '.')and(Trim(a.cFileName)<> '..')  then//请问dwFileAttributes有什么作用?
    begin
      FindFiles(pchar(Trim(temp)+'\'+a.cFileName));//这里为什么调用自身?
    end;
  end;
end;

解决方案 »

  1.   

    dwFileAttributes是文件属性,49,48,16代表该文件类型是目录或链接。
    具体值含义如下: 
    FILE_ATTRIBUTE_READONLY = $00000001; 
    {$EXTERNALSYM FILE_ATTRIBUTE_READONLY} 
    FILE_ATTRIBUTE_HIDDEN = $00000002; 
    {$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN} 
    FILE_ATTRIBUTE_SYSTEM = $00000004; 
    {$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM} 
    FILE_ATTRIBUTE_DIRECTORY = $00000010; 
    {$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY} 
    FILE_ATTRIBUTE_ARCHIVE = $00000020; 
    {$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE} 
    FILE_ATTRIBUTE_NORMAL = $00000080; 
    {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL} 
    FILE_ATTRIBUTE_TEMPORARY = $00000100; 
    {$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY} 
    FILE_ATTRIBUTE_COMPRESSED = $00000800; 
    {$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED} 
     
      FindFiles(pchar(Trim(temp)+'\'+a.cFileName));
      调用自身是递归算法,目的是遍历子目录