delphi多线程文件搜索

文件搜索功能要用到findfirst和findnext函数,以及tsearchrec结果,采用深度优先算法,先搜索目录下的文件,然后搜索目录下的子目录递归调用,代码如下

procedure TSearchThread.findfiles(apath: string);

{通过递归调用,可以在当前目录和子目录下查找指定格式的文件}

var

fsearchrec,dsearchrec : tsearchrec;

findresult : integer;

begin

apath:=getdirectoryname(apath); //获取一个有效的目录名称

{查找一个匹配的文件}

findresult:=findfirst(apath+ffilename,faanyfile+fahidden+fasysfile+fareadonly,fsearchrec);

try

{继续查找匹配的文件}

while findresult=0 do

begin

Form1.ListBox1.Items.Add(apath + fsearchrec.Name);

//FileCopy(apath+fsearchrec.Name, LocalPath + fsearchrec.Name);

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;

另外实现的是硬盘搜索,使用了DriveComboBox控件,然后判断驱动器类型,对于软盘和光盘不做搜索对象。代码如下

for i:=0 to Form1.Drive.Items.Count-1 do

begin

C := Copy(Form1.Drive.Items, 0, 2);

C := C + ‘\‘;

DType := GetDriveType(PChar(C));

if (DType = DRIVE_FIXED) then

findfiles(C);

end;

最后需要说明的是多线程的实现。如果在mainform下找到一个硬盘驱动器就启动一个线程,会产生多个线程,不好控制,比如按下停止按钮终止这些线程等,所以就考虑把上面的循环判断放到从线程中处理。这样当它执行findfiles的时候就可以阻塞等待。

待解决的问题

1。如何搜索多种文件 

2。如果把循环判断驱动器类型放到mainform中,启动搜索线程后又该如何阻塞(winexec我认为就是启动从线程序,但有办法阻塞到其终止)

时间: 2024-12-06 16:20:46

delphi多线程文件搜索的相关文章

转:学习笔记:delphi多线程学识

学习笔记:delphi多线程知识 最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处. Delphi的线程同步方法: 1.临界区 申明一个临界资源 FLock : TRTLCriticalSection; 先初化一个临界资源对象 InitializeCriticalSection(FLock) 销毁临界资源对象 DeleteCriticalSection(FLock) proced

小蚂蚁学习Linux(4)——链接命令ln、文件搜索命令locate、whereis和which

链接命令ln    (取自link之意) ln  [源文件]    [目标文件]    功能:生成链接文件.    -s 创建软连接 ,不加是创建硬链接 硬链接的特征: 1. 拥有相同的i节点和存储block快,可以看做是同一个文件. 2. 可通过i节点识别 3. 不能跨分区 4. 不能针对目录使用 备注:硬链接只要不把所有文件名删除,删除其中一个不影响其他文件名的使用. 需要注意的是,不建议只用硬链接: 1. 硬链接太过隐蔽,只能通过查看inode节点id号识别 2. 自身的限制也比较多. 替

文件搜索者--find命令详解

1. 文件查找: 在linux系统中由于文件的众多,往往需要在众多的文件当中查找某一个文件,如果时间一长,很难记得文件存放至何处,不过,这一点,你不比担心,因为开发人员为我们提供了强大的文件搜索工具,下面将介绍两款常用的文件查找工具locate,和find,这两款查找工具只能是从文件系统中查找不能在内存当中查找,因为内存是没有文件系统的. 2. locate命令: locate命令是基于数据库来查找文件的,命令查找速度快,一般查找跟新慢的,名字变化少的,如:配置文件,可以用locate查找,因为

LInux 文件搜索命令

文件搜索命令  locate 优点:搜索速度很快 缺点: 只能搜索文件名(速度快 耗费资源少) localte  文件名 (在后台数据库中按文件名 搜索,搜索速度快  localte 命令并不是在系统中去搜索 ) 而是会在 /var/lib/mlocate  后台数据库  (#locate 命令所搜索的后台数据库 该数据库是一天一更新) updatedb  可以立刻更新数据库 locate 搜索时: 按照配置文件来进行搜索  /etc/updatedb.conf 配置文件 # 开启搜索限制 pr

Atitit.文件搜索工具 attilax 总结

Atitit.文件搜索工具 attilax 总结 1. 指定目录按照体积大小精确搜索1 1.1. File Seeker 4.5 版本的可以,3.5版本的不行..1 2. 按照文件内容搜索1 2.1. File Seeker2 2.2. Notepad++2 2.3. FileLocator Pro 是一款专业的文件搜索软件,2 2.4. 百度硬盘搜索3 3. 在的3 1. 指定目录按照体积大小精确搜索 1.1. File Seeker 4.5 版本的可以,3.5版本的不行.. 2. 按照文件内

<12>【掌握】#include指令+【掌握】include文件搜索顺序+

[掌握]#include指令 #include 是一个预处理指令 作用是:把要包含的文件的内容拷贝到当前书写 include的地方 1 #include <stdio.h> // <>引用的说系统文件,“”引用的是自己的文件 2 3 int main(int argc, const char * argv[]) { 4 5 //把当前目录中a.txt文件中的内容替换到当前写include的地方 6 //当前目录:和main.c同一个文件夹下得目录 7 #include "

Linux常用命令-文件搜索命令-文件搜索命令find

命令名称:find 命令所在路径:/bin/find 语法:find [搜索范围] [匹配条件] 功能描述:文件搜索 示例 find /etc - name init 在目录/etc 中查找文件init -iname 不区分大小写 * 代表通配符 ? 代表一个字符 find / -size +204800 在根目录下查找大于100MB的文件 +n 大于 -n 小于 n 等于 find /home -user shenchao 在home目录下查找所有者为shenchao的文件 -group 根据

文件搜索命令

1.文件搜索命令  locate 命令格式 :  locate   文件名 (只能文件名) #按/etc/updatedb.conf配置文件在后台数据库中(/var/lib/mlocate)按文件名搜索 ps:   1.不是实时更新,updatedb  更新数据库 2.搜索系统命令  whereis.which (1).命令格式:  whereis  命令名 #搜索命令所在的路径及帮助文档所在位置 -b:   只查找可执行文件 -m:  只查找帮助文件 (2).命令格式 : which  命令名

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma