我在数据库里存了一些文件的文件名,要系统能自动去搜索这些文件在计算机里的路径!搜索到以后自动写到数据库里和该文件对应的路径里,请问有没有什么方法!还有查到了和没查到应该在哪里区分,比如查到了showmessage('查到了');没查到就showmessage('没查到');,这个应该在哪里进行判断呢?代码如下:
function TForm1.CheckDir(SearchRec: TSearchRec):integer;
begin
  if ((SearchRec.Attr <> 16) and (SearchRec.Name<>'.') and (SearchRec.Name<>'..'))
  then Result:=0
  else if ((SearchRec.Attr = 16) and (SearchRec.Name<>'.') and (SearchRec.Name<>'..'))
       then Result:=1
       else Result:=2;
end;procedure TForm1.SearchFile(CurrentDir:string;SearchFileName:string;SearchResult:TStrings);
var
  i:integer;
  Subdir:TStringList;
  SearchRec:TsearchRec;
begin
  //第一次调用FindFirst和FindNext查找符合要求的文件
  if (FindFirst(CurrentDir+SearchFileName, faAnyFile, SearchRec)=0) then
  begin
    repeat
      if Form1.CheckDir(SearchRec)=0 then
      begin
        SearchResult.Add(CurrentDir+SearchRec.Name);
        localaddress:=CurrentDir+SearchRec.Name;
      end;
      application.ProcessMessages ;
    until (FindNext(SearchRec) <> 0);
  end;
  FindClose(SearchRec);
  //以下是递归部分,查找各子目录。
  Subdir:=TStringList.Create;
  if (FindFirst(CurrentDir+'*.*', faDirectory, SearchRec)=0) then
  begin
    repeat
      if Form1.CheckDir(SearchRec)=1 then
      begin
        Subdir.Add(SearchRec.Name);
      end;
      application.ProcessMessages ;
    until (FindNext(SearchRec) <> 0);
  end;
  FindClose(SearchRec);
  for i:=0 to Subdir.Count-1 do
  begin
    SearchFile(CurrentDir+Subdir.Strings[i]+'\',SearchFileName,SearchResult);
  end;
  Subdir.Free;
end;

解决方案 »

  1.   

    数据库:
    名称  路径
    123.exe   
    234.exe   
    .
    .
    .就是要把这些名称读取出来,再在硬盘里搜索,如果搜索到了就把路径写入数据库,我现在是读1条记录搜一次硬盘,有没有方法可以一次性,或同时对多条记录进行搜索的!
    我现在的搜索代码如下:
    procedure TForm1.SearchFilesClick(Sender: TObject);
    var
      i:integer;
      SearchFileName:String;
    begin
      if edit2.Text = '' then showmessage('请输入要查询的目录!') else
      begin
        memo1.Lines.Clear;
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('select * from table1');
        ADOQuery1.Open;
        for i:= 0 to ADOQuery1.RecordCount-1 do
        begin
          try
            SearchFileName:=ADOQuery1.FieldByName('名称').AsString;
            SearchFile(Edit2.Text,SearchFileName,memo1.Lines);
            ADOQuery1.Edit;
            ADOQuery1.FieldByName('路径').AsString:=LocalAddress;
            ADOQuery1.Post;
          finally
            ADOQuery1.Cancel;
          end;
          ADOQuery1.Next;
        end;
        showicons;// 把数据显示到listview种的过程
      end;
    end;
      

  2.   

    那怎么知道搜索后的结果呢,可不可以让他搜索到了showmessage('查到了');没搜索到就showmessage('没查到');