在应用实践中
我们经常会用到文件查询功能
通过Win
中提供的查找功能
我们可以方便的找出磁盘上任何子目录下的文件
其原因是该查找功能可以遍历指定目录下的所有子目录中的文件
从编程角度讲
它实现了子目录级的文件查询
其实
这项功能并不难实现
关键是能理解并掌握懙莨阍这种程序设计思路
本人用Delphi实现了该项功能(任意子目录级)
由于使用了懙莨阍
程序思路清晰
代码量小
实现方法
. 获取当前目录下的所有下一级子目录
. 存入字符串列表中(Tstrings)
其中用到了几个API函数
FindFirst 是找出指定目录下第一个文件或目录
FindNext 一般和FindFirst配合使用用来找出下一个文件或目录
FindClose 用来关闭查询
(以上函数Delphi在线帮助中有详尽解释在此不赘述)
. 用FileExists函数查找当前目录
. 寻找是否有满足条件的文件存在
. 依次使各个子目录成为当前目录
. 递归调用本函数
. 释放资源
. 返回查询结果
代码如下
从搜索记录中判断是否是子目录
function IsValidDir(SearchRec:TSearchRec):Boolean; begin if (SearchRecAttr=) and (SearchRecName<>) and (SearchRecName<>) then Result:=True else Result:=False; end;
. 这是查询主体函数
参数介绍
Mainpath 指定的查询目录 Filename 欲查询的文件 Foundresult 返回的含完整路径的匹配文件(可能有多个) 如果有匹配文件函数返回True否则返回False; function SearchFile(mainpath:string; filename:string; var foundresult:TStrings):Boolean; var i:integer; Found:Boolean; subdir:TStrings; searchRec:TsearchRec; begin found:=false; if Trim(filename)<> then begin subdir:=TStringListCreate;//字符串列表必须动态生成 //找出所有下级子目录 if (FindFirst(mainpath+** faDirectory SearchRec)=) then begin if IsValidDir(SearchRec) then subdirAdd(SearchRecName); while (FindNext(SearchRec) = ) do begin if IsValidDir(SearchRec) then subdirAdd(SearchRecName); end; end; FindClose(SearchRec); //查找当前目录 if FileExists(mainpath+filename) then begin found:=true; foundresultAdd(mainpath+filename); end; //这是递归部分查找各子目录 for i:= to subdirCount do found:=Searchfile(mainpath+subdirStrings[i]+ \Filenamefoundresult)or found; //资源释放并返回结果 subdirFree; end; result:=found; end;
总之只要掌握了思路用哪种编程语言都可以实现现在你可以轻松的给你 的系统挂上一个非常使用的功能了