一种目录文件的快速检索方法与流程

文档序号:12719897阅读:1181来源:国知局

本发明属于信息检索技术领域,特别涉及一种基于多线程技术的目录文件检索方法。



背景技术:

目前,随着电子技术的飞速发展,办公往往不可能脱离电脑,我们通常需要保留重要的文件,书写记录显然是耗时耗力的,电脑便成为了我们日常生活中存储文件的重要容器。当今,随着文件规模的壮大,人们已经不再满足于将文件存储在本地电脑上(受存储空间的限制),于是,各类网络文档管理系统层出不穷。为了提高企业(单位)员工的工作效率和信息安全,大部分企业(单位)都对员工的办公文件进行一定的管控,不可避免地会需要将本地终端文件上传/备份到服务器,这就意味着需要有一个存放大量文件的文件仓库。

于是,为了满足从一个复杂目录的文件仓库中检索或遍历文件的方便快速,我们通常想尽办法去提高文件的检索效率,简而言之是为了能够对于在一个无序的文件仓库中的操作尽可能地减少所花费的时间。通常,当我们试图检索/遍历一个目录的时候,最开始且最低效的做法是定义一个通过目录参数查找下级子目录和文件的递归方法,这种方法无法充分地利用系统资源且无法从细节处提升一定的效率,之后,有人发明了多线程的使用,意味着电脑程序可以同步进行多件事,这大大提高了程序的工作效率以及实现方法的开拓。我们不禁想到多线程技术可以使文件检索/遍历的效率大幅提升,但是如何最大化地利用多线程的优势,最大地提升文件系统的检索/遍历效率,已经成为当前重要的研究方向。

对于一个多层级的复杂目录结构,现有方案是预先创建好固定数目的线程池,扫描顶层目录的下一级目录后,将扫描到的子目录作为子任务投递到线程池中某个空闲的线程中,进行任务目录(上级扫描到的子目录)的文件扫描及再次扫描到子目录进行重复投递处理。

现有方案具有以下不足:

(1)此方法线程不能及时结束并回收内存资源。

(2)此方法线程数量固定,不能很好地处理目录层次极其复杂的情况,例如当有10个线程要处理11个任务目录时,就会出现一个任务需要等待。

基于以上分析,现有的检索方法效率低,有待改进,本案由此产生。



技术实现要素:

本发明的目的,在于提供一种目录文件的快速检索方法,其可充分利用系统的资源与回收,缩短检索/遍历消耗时间。

为了达成上述目的,本发明的解决方案是:

一种目录文件的快速检索方法,设置消息接收模块和线程处理模块,所述检索方法包括如下步骤:

步骤1,主进程对根目录地址的下一级进行扫描,查找到目标文件则结束并返回,当发现子目录则向消息接收模块发送特定消息,并将子目录地址传递给消息接收模块;

步骤2,消息接收模块接收到特定消息后,创建新线程,并将接收到的子目录地址参数传送至线程处理模块;

步骤3,线程处理模块对子目录的下一级进行扫描,若查找到目标文件则将目标文件地址返回给主进程,并结束线程检索方法流程,并释放线程资源;

步骤4,重复步骤2-3,直至查找到目标文件。

上述步骤1的详细内容是,主进程以根目录地址为参数对目标目录地址的下一级进行扫描,若查找到目标文件则将目标文件地址作为方法函数返回值返回,结束检索流程;若没有找到目标文件,则将每次查找到的子目录Ai循环向消息接收模块发送特定消息,同时将查找到的子目录Ai地址参数传送至消息接收模块,其中,i=1,2,…,n,且A1-An为目录标识,n为根目录下一级的目录节点数量。

上述步骤2中,消息接收模块接收到特定消息后,从缓存获取一块内存块创建新线程并得到相应的线程号。

上述步骤3中,若线程处理模块查找到目标文件,则将目标文件地址存入公共变量返回给主进程。

上述步骤3中,若线程处理模块未查找到目标文件,则将每次查找到的子目录Bj循环向消息接收模块发送特定消息,同时将查找到的子目录Bj的地址参数传送至消息接收模块,其中,j=1,2,…,m,且B1-Bm为目录标识,m为该子目录下一级的目录节点数量。

上述步骤4中,消息接收模块从缓存获取一块内存块创建新线程并得到相应的线程号,将接收到的子目录Bj地址参数传送至线程处理模块,重复步骤2-3,直至查找到目标文件,结束检索流程并返回。

上述步骤3中,当子目录的下一级扫描完毕后,结束扫描,释放线程资源。

采用上述方案后,本发明基于多线程技术而产生,具有如下特点:

(1)本发明具有简易性,不需要对任务队列或栈进行管理;

(2)本发明具有灵活性,可根据具体需要的线程数目进行创建,线程为一次性,用完即释放;

(3)本发明适用性较高,对于不同规模的文件库系统的规模具有很好的适应性,对多级目录和单级目录都有很好的时效性。

附图说明

图1是本发明的流程图。

具体实施方式

以下将结合附图,对本发明的技术方案进行详细说明。

如图1所示,本发明提供一种目录文件的快速检索方法,设置消息接收模块和线程处理模块,所述检索方法包括如下步骤:

步骤1,主进程(当前程序进程)自定义方法函数,以根目录地址为参数对目标目录地址的下一级进行扫描,若查找到目标文件则将目标文件地址作为方法函数返回值返回,告知查询人查询结果并结束检索流程;若没有找到目标文件,则将每次查找到的子目录Ai(i=1,2,…,n,A1-An为目录标识,n为根目录下一级的目录节点数量)循环向消息接收模块发送特定消息,同时将查找到的子目录Ai地址参数传送至消息接收模块;

步骤2,消息接收模块接收到特定消息后,从缓存获取一块内存块创建新线程并得到相应的线程号,并将接收到的子目录地址参数传送至该线程处理模块;

步骤3,线程处理模块将子目录Ai地址作为目标地址作为参数,扫描An的下一级子文件和目录,若查找到目标文件则将目标文件地址存入公共变量返回给主进程,并结束线程检索方法流程,并释放线程资源;若没发现目标文件,则将每次查找到的子目录Bj(j=1,2,…,m,B1-Bm为目录标识,m为该子目录下一级的目录节点数量)循环向消息接收模块发送特定消息,同时将查找到的子目录Bj的地址参数传送至消息接收模块;下一级子文件和目录扫描完毕后,结束对目标地址参数目录Ai的扫描,释放线程资源;

步骤4,消息接收模块从缓存获取一块内存块创建新线程并得到相应的线程号,将接收到的子目录Bj地址参数传送至该线程处理模块,重复步骤2-3,直至查找到目标文件,结束检索流程将结果正确地返回给查询人。

以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1