如何用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实现子目录级的文件查询的主要内容,如果未能解决你的问题,请参考以下文章

delphi 如何用ssleay32.dll

如何用Python实现查找"/"目录下的文件夹或文件,感谢

如何用delphi打开pas文件

如何用delphi实现剪贴板

delphi中如何用finddialog实现对memo控件的查找

如何用批处理实现“在指定的目录下自动删除大于10K的文件"