在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>文档中心>Delphi>文档A0000402 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入
相关文章
没有相关文章
发表文章
通过递归来实现搜索文件

原作者:叶海河     提交人:andy zyb     发布时间:03-08-05     文章类型:转贴     浏览量:2163
参考链结:http://    
关键字:
[本文档没有附件]
字体:    视力保护色: 杏仁黄  秋叶褐  胭脂红  芥末绿  天蓝  雪青  灰  银河白(默认色) [A0000402]

在我们编写程序的时候,经常会用到在某个目录和子目录中搜索文件这一过程,但Delphi并没有为我们提供这一功能函数,它只为我们提供了一些只能在当前目录查找文件的函数,不过现在在网上也能找到一些可以实现此功能的控件,例如FileSearch等等。那么我们要自己编写这个功能,又应该怎么样做呢?其实本功能最难实现的部分就是要编写能逐层访问目录的算法。经本人研究,终于得出一个实现它的方法,那就是利用递归调用算法来实现,现将其实现过程介绍如下:
    1、窗体设计
        新建一个工程,在Form1中添加DriveComboBox1、Edit1、Listbox1、Button1、DirectoryOutline1、Label1,把Edit1的Text属性改为*.*,Button1的Caption属性改为"查找",各个控件布局如下图:
   
   
    2、程序清单
    unit main;
   
    interface
   
    uses
      Windows, Messages, SysUtils, Classes, Graphics,
      Controls, Forms, Dialogs,stdctrls,filectrl,grids,outline,diroutln;
   
    type
      TForm1 = class(TForm)
        DriveComboBox1: TDriveComboBox;
        Edit1: TEdit;
        Listbox1: TListBox;
        Button1: TButton;
        Label1: TLabel;
        DirectoryOutline1: TDirectoryOutline;
        procedure Button1Click(Sender: TObject);
        procedure DriveComboBox1Change(Sender: TObject);
      private
        { Private declarations }
      ffilename:string;
      function getdirectoryname(dir:string):string;
      procedure findfiles(apath:string);
      public
        { Public declarations }
      end;
   
    var
      Form1: TForm1;
      t:integer;
    implementation
   
    {$R *.DFM}
    function tForm1.getdirectoryname(dir:string):string;
    {对文件名进行转换,使之以反斜杠结尾}
      begin
        if dir[length(dir)]<>'' then
          result:=dir+''
        else
          result:=dir;
      end;
   
   
    procedure TForm1.findfiles(apath: string);
    {通过递归调用,可以在当前目录和子目录下查找指定格式的文件}
    var
      fsearchrec,dsearchrec:tsearchrec;
      findresult:integer;
    function isdirnotation(adirname:string):boolean;
        begin
        result:=(adirname='.') or (adirname='..');
        end;
    begin
   
    apath:=getdirectoryname(apath); //获取一个有效的目录名称
   
    {查找一个匹配的文件}
    findresult:=findfirst(apath+ffilename,faanyfile+fahidden+fasysfile+fareadonly,fsearchrec);
    try
    {继续查找匹配的文件}
    while findresult=0 do
      begin
        Listbox1.Items.Add(lowercase(apath+fsearchrec.Name));
        t:=t+1;
        label1.Caption:=inttostr(t);
        findresult:=findnext(fsearchrec);
      end;
   
    {在当前目录的子目录中进行查找}
    findresult:=findfirst(apath+'*.*',fadirectory,dsearchrec);
    while findresult=0 do
      begin
        if ((dsearchrec.Attr and fadirectory)=fadirectory) and not
          isdirnotation(dsearchrec.Name) then
          findfiles(apath+dsearchrec.Name);//在此处是递归调用
        findresult:=findnext(dsearchrec);
      end;
   
    finally
    findclose(fsearchrec);
    end;
    end;
   
    procedure TForm1.Button1Click(Sender: TObject);
    {调用FindFiles()函数,用来搜索子目录}
    begin
    t:=0;
    screen.Cursor:=crhourglass;
    try
      Listbox1.Items.Clear;
      ffilename:=Edit1.Text;
      findfiles(DirectoryOutline1.Directory);
    finally
    screen.Cursor:=crdefault;
    end;
    end;
   
    procedure TForm1.DriveComboBox1Change(Sender: TObject);
    begin
    DirectoryOutline1.Drive:=DriveComboBox1.Drive;
    end;
   
    end.
   
    本程序在Win2000/Delphi6中运行通过。

关于这篇文章的评论 [注意:这里仅仅是给大家提供了一个发表对文章本身看法的地方,如果有疑问,请到论坛提出] 我要提问!
标题
内容
发言
*您尚未以注册用户身份登录,不能发表评论。这里登录
您的位置
  (c)2000-2019 Yup Studio, all rights reserved.  
61.52344