怎样实现对文件夹的模糊查询?(200分)

  • 主题发起人 主题发起人 hlxiang
  • 开始时间 开始时间
H

hlxiang

Unregistered / Unconfirmed
GUEST, unregistred user!
比如,机子上有文件夹 电影A ,电影B,电影C 等,分布在不同的地方。如何用关键字“电影”就可以搜索到这些文件夹的位置,就像windows自带的搜索功能一样,并列出列表,双击就可以打开所在文件夹?
 
列举文件夹,DELPHI自带的例子Demo/Virtual Listview
有这个例子,
当然你能够取得文件名字,
对于字符的模糊判断,应该是算法问题。

这是我给一点思路希望能帮你。。。
 
procedure TForm1.RepireFilePath;
Var
i:integer;
Found: integer;
SearchRec: TSearchRec;
begin

Found := FindFirst(FilePathList.Items.Strings + '/*.*',faAnyFile,searchrec);
while Found = 0 do
begin


if(SearchRec.Name <> '.')and(SearchRec.Name <> '..') then
begin
if ((SearchRec.Attr and faDirectory)<>0) then //directory
begin

end else
begin


SearchRec.Name//根据文件名来判断
//写到列表里

end;
end;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);


end;
 
获得文件夹的函数:
procedure SearchDir(WatchSubTree:Boolean;MainPath:String;SubTree:Boolean);
var i:Integer;
Found:Boolean;
SubDir:TSTringList;
SearchRec:TsearchRec;
begin
if DirectList=nil then DirectList:=TStringList.Create;
if not SubTree then DirectList.Clear;
SubDir:=TStringList.Create;
if DirectoryExists(MainPath) then begin
//第一次遍历时加上本目录
if DirectList.Count=0 then DirectList.Add(MainPath);
//找出所有下级子目录
if (FindFirst(mainpath+'/*.*', faDirectory, SearchRec)=0) then begin
if IsValidDir(SearchRec) then begin
SubDir.Add(SearchRec.Name);
DirectList.Add(MainPath+'/'+SearchRec.Name);
end;
while (FindNext(SearchRec) = 0) do begin
if IsValidDir(SearchRec) then begin
SubDir.Add(SearchRec.Name);
DirectList.Add(MainPath+'/'+SearchRec.Name);
end;
end;
end;
end;
if WatchSubTree then begin
//递归:查找各子目录
for i:=0 to SubDir.Count-1 do
SearchDir(True,mainpath+'/'+SubDir.Strings+'/',True);
end;
end;
function IsValidDir(SearchRec:TSearchRec):Boolean;
begin
if (SearchRec.Attr=16) and
(SearchRec.Name<>'.') and
(SearchRec.Name<>'..') then
Result:=True
else Result:=False;
end;
打开文件夹的函数:
shellexecute(application.handle, nil, pchar('D:/'), nil, nil, SW_SHOWNORMAL );
 
用DOS命令 DIR/C/S 电影*.*
 
各位大侠,给个可用的样例阿
 
后退
顶部