为什么80%的码农都做不了架构师?>>>   

//上面一个例子不能说明递归函数的本质, 直接来个实用的函数吧, 刚好要用.unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Memo1: TMemo;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}//列出一个目录下所有目录(包括嵌套)的函数
procedure GetDirs(dirName: string; List: TStrings);
varSRec: TSearchRec;            {定义 TSearchRec 结构变量}dir: string;
constattr: Integer = faDirectory; {文件属性常量, 表示这是文件夹}
begindirName := ExcludeTrailingBackslash(dirName) + '\'; {不知道最后是不是 \; 先去掉, 再加上}dir := dirName + '*.*'; {加上 \; *.* 或 * 表示所有文件, 系统会把目录也当作一个文件}if FindFirst(dir, attr, SRec) = 0 then {开始搜索,并给 SRec 赋予信息, 返回0表示找到第一个}beginrepeatif (SRec.Attr = attr) and              {如果是文件夹}(SRec.Name <> '.') and              {排除上层目录}(SRec.Name <> '..') then            {排除根目录}beginList.Add(dirName + SRec.Name);      {用List记下结果}GetDirs(dirName + SRec.Name, List); {这句就是递归调用, 如果没有这句, 只能搜索当前目录}end;until(FindNext(SRec)<>0);                {找下一个, 返回0表示找到}end;FindClose(SRec);                           {结束搜索}
end;{测试}
procedure TForm1.Button1Click(Sender: TObject);
varlist: TStrings;
beginlist := TStringList.Create;GetDirs('C:\Downloads', list);Memo1.Lines := list;list.Free;
end;end.

转载于:https://my.oschina.net/hermer/blog/319514

理解 Delphi 的类(十) - 深入方法[28] - 递归函数实例: 搜索当前目录下的所有嵌套目录...相关推荐

  1. 理解 Delphi 的类(十) - 深入方法[27] - 递归函数: 简单示例

    为什么80%的码农都做不了架构师?>>>    //所谓递归函数, 就是自己调用自己的函数, 先来个简单的例子:{递归调用的简单示例} procedure alert(i: Inte ...

  2. 理解 Delphi 的类(十) - 深入方法[17] - 提前声明

    为什么80%的码农都做不了架构师?>>>    //要点17: 如果前面的方法要调用后面的方法, 后面的方法需要提前声明 function MyFunB(x: Integer): I ...

  3. 理解 Delphi 的类(十) - 深入方法[23] - 重载

    为什么80%的码农都做不了架构师?>>>    {下面的函数重名, 但参数不一样, 此类情况必须加 overload 指示字;调用时, 会根据参数的类型和个数来决定调用哪一个;这就是 ...

  4. 理解 Delphi 的类(十) - 深入方法[9] - 调用时的括号

    为什么80%的码农都做不了架构师?>>>    //要点9: 没有参数的过程或函数, 在调用时可以省略 (); 也可以带着 function MyFun: string; begin ...

  5. 理解 Delphi 的类(十) - 深入方法[4] - 共同类型的参数的简化写法

    //要点4: 多个相同类型的参数可以简化写法 function MyFun(str: string; x,y,z: Integer): string; beginResult := str + Int ...

  6. 理解 Delphi 的类(十) - 深入方法[13] - 在 interface 区声明的方法

    为什么80%的码农都做不了架构师?>>>    //要点13: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1;inter ...

  7. 理解 Delphi 的类(十) - 深入方法[2] - 参数分割

    //要点2: 过程和函数都可以有一个或多个参数; 参数用 ; 号分割 procedure MyProc(i: Integer); beginShowMessage(IntToStr(i)); end; ...

  8. 理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数

    为什么80%的码农都做不了架构师?>>>    //要点15: 调用其他单元的函数 //包含函数的单元: unit Unit2;interfacefunction MyFun(x,y ...

  9. 理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类

    //抽象方法类似与接口; 在没有接口的年代 Delphi 是用抽象方法来模拟接口的; 我想它最终会被接口替代.{下面就定义了两个抽象方法} TMyClass = class(TObject)proce ...

最新文章

  1. php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)
  2. rails安装与卸载
  3. php 开启 pathinfo,nginx下PHP开启pathinfo模式
  4. 0.IDA-基本的反汇编算法
  5. java 事务的提出者_java中什么是事务
  6. flex java 开发环境搭建_Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)
  7. JavaScript函数绑定
  8. JanusGraph 安装
  9. java 遍历hashmap key_Java5种遍历HashMap数据的写法
  10. 读书笔记《Spring Boot实战 —— Java EE 开发的颠覆者》
  11. SQL使用技巧(转)
  12. [C++] socket - 4 [线程同步 简单例子]
  13. 基于javaweb+springboot的学生学科竞赛管理管理系统设计和实现(java+springboot+ssm+maven)
  14. Python 情人节超强技能 导出微信聊天记录生成词云
  15. VirtualBox调试分辨率时遇到的问题
  16. 5G C-V2X技术介绍
  17. ajax检测用户名重复无效,用ajax实现检测注册用户名是否重复的完整例子
  18. mysql 越文_mysql数据库乱码之保存越南文乱码解决方法_MySQL
  19. 老森的梦,我的梦,有关预言。 (连载1)
  20. 【从零开始学Skynet】基础篇(九):调试控制台服务

热门文章

  1. vue $emit、$on、$refs简介
  2. 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引
  3. 线程通信问题--生产者和消费者问题
  4. 对话框处理与登录测试
  5. [EXP]windows全版本SMB溢出工具加强版
  6. 【UE4】二十三、UE4笔试面试题
  7. 在目录下所有文件中查找字符串
  8. ASP.NET MVC 音乐商店 - 9. 注册和结账
  9. Tiobe 发布2011年2月开发语言排名,C#和Python在2011年继续上升
  10. 七天学习计划_c#_[1]泛型类(还有六天,明天继续写!)