如何用Delphi实现子目录级的文件查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Delphi实现子目录级的文件查询相关的知识,希望对你有一定的参考价值。
参考技术A 在应用实践中 我们经常会用到文件查询功能 通过Win 中提供的查找功能 我们可以方便的找出磁盘上任何子目录下的文件 其原因是该查找功能可以遍历指定目录下的所有子目录中的文件 从编程角度讲 它实现了子目录级的文件查询 其实 这项功能并不难实现 关键是能理解并掌握懙莨阍这种程序设计思路 本人用Delphi实现了该项功能(任意子目录级) 由于使用了懙莨阍 程序思路清晰 代码量小实现方法
. 获取当前目录下的所有下一级子目录
. 存入字符串列表中(Tstrings)
其中 用到了几个API函数
FindFirst 是找出指定目录下第一个文件或目录
FindNext 一般和FindFirst配合使用 用来找出下一个文件或目录
FindClose 用来关闭查询
(以上函数Delphi在线帮助中有详尽解释 在此不赘述)
. 用FileExists函数查找当前目录
. 寻找是否有满足条件的文件存在
. 依次使各个子目录成为当前目录
. 递归调用本函数
. 释放资源
. 返回查询结果
代码如下
从搜索记录中判断是否是子目录
function IsValidDir(SearchRec:TSearchRec):Boolean; begin if (SearchRec Attr= ) and (SearchRec Name<> ) and (SearchRec Name<> ) 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 :=TStringList Create;//字符串列表必须动态生成 //找出所有下级子目录 if (FindFirst(mainpath+ * * faDirectory SearchRec)= ) then begin if IsValidDir(SearchRec) then subdir Add(SearchRec Name); while (FindNext(SearchRec) = ) do begin if IsValidDir(SearchRec) then subdir Add(SearchRec Name); end; end; FindClose(SearchRec); //查找当前目录 if FileExists(mainpath+filename) then begin found:=true; foundresult Add(mainpath+filename); end; //这是递归部分 查找各子目录 for i:= to subdir Count do found:=Searchfile(mainpath+subdir Strings[i]+ \\ Filename foundresult)or found; //资源释放并返回结果 subdir Free; end; result:=found; end;
lishixinzhi/Article/program/Delphi/201311/8417
在delphi中如何用combobox实现分级读取数据库中的内容
想用两个combobox和一个edit做一个查询~根据在combobox1中选中的项目~combobox2显示相应的子项目~再根据combobox2中选中的子项目~在edit中显示最终结果~我是用sql server2000和delphi连接的~combobox1中的代码已经写出来了~怎么和combobox2连接我就不知道怎么写了~请各位高手帮帮忙~ 以下是实现combobox1的代码~ procedure TForm12.FormCreate(Sender: TObject); begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('SELECT distinct brand from CPU'); adoquery1.Open; combobox1.Items.Clear; while not adoquery1.Eof do begin combobox1.Items.Add(adoquery1.fieldbyname('brand').AsString); adoquery1.Next; end; end;
参考技术A 你可以在combobox1的OnChange事件里写代码adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('SELECT
distinct
XXX
from
CPU
where
brand='''+combobox1.text+'''');
adoquery1.Open;
combobox2.Items.Clear;
while
not
adoquery1.Eof
do
begin
combobox2.Items.Add(adoquery1.fieldbyname('XXX').AsString);
adoquery1.Next;
end;
依次类推,在combobox2的OnChange事件再写事件啊!
以上是关于如何用Delphi实现子目录级的文件查询的主要内容,如果未能解决你的问题,请参考以下文章