理解 Delphi 的类(十) - 深入方法[28] - 递归函数实例: 搜索当前目录下的所有嵌套目录...
为什么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] - 递归函数实例: 搜索当前目录下的所有嵌套目录...相关推荐
- 理解 Delphi 的类(十) - 深入方法[27] - 递归函数: 简单示例
为什么80%的码农都做不了架构师?>>> //所谓递归函数, 就是自己调用自己的函数, 先来个简单的例子:{递归调用的简单示例} procedure alert(i: Inte ...
- 理解 Delphi 的类(十) - 深入方法[17] - 提前声明
为什么80%的码农都做不了架构师?>>> //要点17: 如果前面的方法要调用后面的方法, 后面的方法需要提前声明 function MyFunB(x: Integer): I ...
- 理解 Delphi 的类(十) - 深入方法[23] - 重载
为什么80%的码农都做不了架构师?>>> {下面的函数重名, 但参数不一样, 此类情况必须加 overload 指示字;调用时, 会根据参数的类型和个数来决定调用哪一个;这就是 ...
- 理解 Delphi 的类(十) - 深入方法[9] - 调用时的括号
为什么80%的码农都做不了架构师?>>> //要点9: 没有参数的过程或函数, 在调用时可以省略 (); 也可以带着 function MyFun: string; begin ...
- 理解 Delphi 的类(十) - 深入方法[4] - 共同类型的参数的简化写法
//要点4: 多个相同类型的参数可以简化写法 function MyFun(str: string; x,y,z: Integer): string; beginResult := str + Int ...
- 理解 Delphi 的类(十) - 深入方法[13] - 在 interface 区声明的方法
为什么80%的码农都做不了架构师?>>> //要点13: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1;inter ...
- 理解 Delphi 的类(十) - 深入方法[2] - 参数分割
//要点2: 过程和函数都可以有一个或多个参数; 参数用 ; 号分割 procedure MyProc(i: Integer); beginShowMessage(IntToStr(i)); end; ...
- 理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数
为什么80%的码农都做不了架构师?>>> //要点15: 调用其他单元的函数 //包含函数的单元: unit Unit2;interfacefunction MyFun(x,y ...
- 理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
//抽象方法类似与接口; 在没有接口的年代 Delphi 是用抽象方法来模拟接口的; 我想它最终会被接口替代.{下面就定义了两个抽象方法} TMyClass = class(TObject)proce ...
最新文章
- php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)
- rails安装与卸载
- php 开启 pathinfo,nginx下PHP开启pathinfo模式
- 0.IDA-基本的反汇编算法
- java 事务的提出者_java中什么是事务
- flex java 开发环境搭建_Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)
- JavaScript函数绑定
- JanusGraph 安装
- java 遍历hashmap key_Java5种遍历HashMap数据的写法
- 读书笔记《Spring Boot实战 —— Java EE 开发的颠覆者》
- SQL使用技巧(转)
- [C++] socket - 4 [线程同步 简单例子]
- 基于javaweb+springboot的学生学科竞赛管理管理系统设计和实现(java+springboot+ssm+maven)
- Python 情人节超强技能 导出微信聊天记录生成词云
- VirtualBox调试分辨率时遇到的问题
- 5G C-V2X技术介绍
- ajax检测用户名重复无效,用ajax实现检测注册用户名是否重复的完整例子
- mysql 越文_mysql数据库乱码之保存越南文乱码解决方法_MySQL
- 老森的梦,我的梦,有关预言。 (连载1)
- 【从零开始学Skynet】基础篇(九):调试控制台服务
热门文章
- vue $emit、$on、$refs简介
- 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引
- 线程通信问题--生产者和消费者问题
- 对话框处理与登录测试
- [EXP]windows全版本SMB溢出工具加强版
- 【UE4】二十三、UE4笔试面试题
- 在目录下所有文件中查找字符串
- ASP.NET MVC 音乐商店 - 9. 注册和结账
- Tiobe 发布2011年2月开发语言排名,C#和Python在2011年继续上升
- 七天学习计划_c#_[1]泛型类(还有六天,明天继续写!)