• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphi递归的方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

关于递归,我个人有个肤浅的认识,就是在函数或者过程中调用自身。
比如下面的代码,用递归的方法遍历磁盘文件,找到QQ.exe然后删掉。

 

procedure FindFile(Dir: String);                         // 自定义过程;
var
  Str: TSearchRec;            // 是delphi为我们定义好的一个记录类型。 用于记录文件的各个参数,比如大小,属性,文件名等等;
  Path: string;
begin
  Path := extractfilepath(Dir);      //  利用 ExtractFilePath函数 将文件的路径转为绝对路径然后复制给Path;
  if FindFirst(Dir, faAnyFile, Str) = 0 then           // FindFirst 是一个查找文件函数(查找第一个符合参数文件)里面有三个参数,(路径与文件后缀(C:\*.*) , 文件类型, TSearchRec类型变量(用于储存文件的参数)) , 函数如果找到了文件返回值便是0,否则返回值便是错误指令;
   

while FindNext(Str) = 0 do                  // FindNext是和FindFirst连着用的,FindFirst是查找第一个,FindNext则是查找下一个。 (返回值和FindFirst一样的);
      if (Str.Name <> '.') and (Str.Name <> '..') and (Str.Name = 'QQ.exe') then    //这句就很明显了。在上面连个函数的执行过程中就已经把找到的文件的参数赋值给Str变量了。 而这句话的意思也就是剔除自身文件夹,与父文件夹。并且还要是QQ.exe
      begin
        DeleteFile(Path + Str.Name);  // 如果符合IF的条件,就删掉QQ.exe ;
        FindClose(Str);             // 退出查找,并释放所占的内存。参数还是TSearchRec类型变量;
      end
      else if (Str.Name <> '.') and (Str.Name <> '..') and            
        ((FileGetAttr(Path + Str.Name)) = faDirectory) then       //这里就是进入递归的地方了。 同样是排除父文件夹与自身,然后再判断当前文件是不是文件夹;
        FindFile(Path + Str.Name + '\*.*');                 // 如果符合了上面的条件,那就再调用自身,进行运算, 执行这一句之后就会跳到 begin处执行 反复循环。
end;

   注 : 执行上面的代码后就会在某个磁盘下查找QQ.exe 如果进入了递归之后你会发现在一个文件夹下如果没有QQ.exe程序自动会回到上一级目录中去。

 比如这个目录d:\A\B,即A,B文件夹下都有文件,调用FindFile('d:\A\*.*')时
   可能FindFirst先找到了B文件夹,即符合递归条件再次调用FindFile('d:\A\B\*.*'),
   从而进入到B目录查找(A目录查找还未结束),待B目录查找结束后,会返回到A目录继续之前的动作


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi7程序调用C#写的DLL解决办法(转)发布时间:2022-07-18
下一篇:
DelphiPopupMenu组件发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap