各位,大家好!
 小弟一事相求:
  
 想用DELPHI实现一个类似WINDOW2000的搜索功能:
  
 用控件STRINGGRID显示,不知道怎么写哪个递归函数(即先判断是不是文件夹,搜索文件夹下是不是含有要找的文件,一步步下去);
 
在线等待!!!急急急、、、、、

解决方案 »

  1.   

    function SearchFile(mainpath, filename: string;
      var foundresult: TStrings): Boolean;
    var
      i: integer;
      Found: Boolean;
      subdir1: TStrings;
      searchRec: TsearchRec;
    begin
      if GetStrRight(mainpath, 1) <> '\' then mainpath := mainpath + '\';//自己写的,关键判断是否最后一个字符是“\”,你可以自己改一下。
      found := False;
      if Trim(filename) <> '' then
      begin
        subdir1 := TStringList.Create;
        if (FindFirst(mainpath + '*.*', faDirectory, SearchRec) = 0) then
        begin
          if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
            and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
          while (FindNext(SearchRec) = 0) do
          begin
            if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
              and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
          end;
        end;
        FindClose(SearchRec);
        //&sup2;é&Otilde;&Ograve;&micro;±&Ccedil;°&Auml;&iquest;&Acirc;&frac14;&iexcl;&pound;
        if (FindFirst(mainpath + filename, faAnyFile - faDirectory, SearchRec) = 0) then
        begin
          foundresult.Add(mainpath + SearchRec.Name);
          while (FindNext(SearchRec) = 0) do
          begin
            foundresult.Add(mainpath + SearchRec.Name);
          end;
        end;
        FindClose(SearchRec);
        for i := 0 to subdir1.Count - 1 do
          found := Searchfile(mainpath + subdir1.Strings[i] + '\', Filename, foundresult) or found;
        subdir1.Free;
      end;
      Result := found;
    end;
      

  2.   

    function SearchFile(mainpath, filename: string;
      var foundresult: TStrings): Boolean;
    var
      i: integer;
      Found: Boolean;
      subdir1: TStrings;
      searchRec: TsearchRec;
    begin
      if copy(mainpath, length(mainpath), 1) <> '\' then mainpath := mainpath + '\';
      found := False;
      if Trim(filename) <> '' then
      begin
        subdir1 := TStringList.Create;
        if (FindFirst(mainpath + '*.*', faDirectory, SearchRec) = 0) then
        begin
          if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
            and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
          while (FindNext(SearchRec) = 0) do
          begin
            if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
              and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
          end;
        end;
        FindClose(SearchRec);
        if (FindFirst(mainpath + filename, faAnyFile - faDirectory, SearchRec) = 0) then
        begin
          foundresult.Add(mainpath + SearchRec.Name);
          while (FindNext(SearchRec) = 0) do
          begin
            foundresult.Add(mainpath + SearchRec.Name);
          end;
        end;
        FindClose(SearchRec);
        for i := 0 to subdir1.Count - 1 do
          found := Searchfile(mainpath + subdir1.Strings[i] + '\', Filename, foundresult) or found;
        subdir1.Free;
      end;
      Result := found;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      ss: TStrings;
    begin
      ss := TStringList.Create;
      SearchFile('C:\whsh\', 'qwe.txt', ss);
      memo1.Lines.AddStrings(ss);
      ss.Free;
    end;