我在数据库里存了一些文件的文件名,要系统能自动去搜索这些文件在计算机里的路径!搜索到以后自动写到数据库里和该文件对应的路径里,请问有没有什么方法!还有查到了和没查到应该在哪里区分,比如查到了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;
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;
名称 路径
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;