Delphi下递归查找目录的通用方法
来源:互联网 发布:淘宝网袜子批发 编辑:程序博客网 时间:2024/04/28 07:28
最近的项目中用到了Windows下的目录搜索,特整理了一段通用算法如下:
//定义搜索到文件时的回调函数
//如果是非对象方法,请去掉of object部分
//aFile: 搜索到的文件
//willStop: 外部变量,用于决定回调操作后,是否终止搜索。
TFindFile = procedure(aFile: string; var willStop: boolean) of object;
//通用的目录搜索算法
//aDir: 要搜索的目录
//onFind: 搜索到文件时的回调函数
procedure doFindFile(aDir: string; onFind: TFindFile);
var strDir, strfile: string;
ff: _WIN32_FIND_DATAA;
hf: THandle;
blStop: boolean;
begin
//记录当前的目录
strDir := getCurrentDir;
//设置当前目录为要搜索的目录
setcurrentDir(aDir);
try
//开始搜索
hf := Windows.FindFirstFile('*.*', ff);
if hf > 0 then begin
repeat
strFile := ff.cFileName;
//如果是目录,则递归调用
if (ff.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY) then begin
if (strFile <> '') and (pos('.', strFile) = 0) then begin
doFindFile(aDir + strFile + '/', onFind);
end;
end else begin
blStop := False;
//如果是文件,交由回调函数处理
onFind(aDir + strFile, blStop);
//如果回调函数要求终止搜索,则退出当前的递归过程
if blStop then begin
Windows.FindClose(hf);
Exit;
end;
end;
until (not Windows.FindNextFile(hf, ff));
//终止查找
Windows.FindClose(hf);
end;
finally
//恢复搜索前的目录
setCurrentDir(strDir);
end;
end;
算法的关键在于通过定义具有通用参数的回调函数,来将目录搜索中的关键操作独立出来,以实现算法的通用性。
下面举个例子说明其调用过程:
procedure TForm1.findTextFile(aFile: string; var willStop: boolean);
begin
if LowerCase(ExtractFileExt(aFile)) = '.txt' then
willStop := Application.MessageBox(pchar('找到了文本文件 ' + aFile + '! 要停止搜索吗?'), '提示', MB_YESNO) = mrYes;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//Edit1.Text 定义了要搜索的目录
if Copy(Edit1.Text, Length(Edit1.Text), 1) <> '/' then Edit1.Text := Edit1.Text + '/';
//调用通用搜索算法,查找文本文件
doFindFile(Edit1.Text, findTextFile);
end;
- Delphi下递归查找目录的通用方法
- DELPHI--查找目录下所有文件方法二
- 递归 / 迭代两种方法实现查找指定目录下所有文件
- JAVA 的递归方法查找目录下的文件和文件夹
- 递归查找出目录下的所有文件
- 使用libboost_filesystem.so库递归查找目录下的文件
- 递归查找目录下的图片并加水印
- DELPHI--查找目录下所有文件
- DELPHI--获取某目录下的所有文件名的方法
- 在目录下递归建立文件的方法
- VS下的各种默认目录的查找方法
- linux下递归查找某目录下所有文件包含某字符串的命令
- linux下grep实现某目录下所有目标字符串的递归(包含子目录)查找
- Linux下查找大文件,大目录的方法
- Linux下查找大文件,大目录的方法
- Java递归查找指定目录下的特定格式的文件 并压缩到指定目录下
- Delphi控件的通用删除方法
- Delphi 2010 破解的方法[通用]
- linux下apache的安装
- 马云对雅虎员工的精彩演讲:爱迪生欺骗了世界
- SCW安全配置向导
- Visual C#的Excel编程
- 赴京领SOA年度明星博客奖后记
- Delphi下递归查找目录的通用方法
- 回到这里
- 逃
- Vista Gadget on Mobile?没错,你没有看错!
- JAVA最近的学习 JAVA精简学习版 3,6
- OpenCms7 alpha1发布及其特性
- 编译java文件(含jar包)
- 翻译 项目管理艺术 2.3
- 给C++程序员的一份礼物——常用工具集