首页> 中国专利> 文件扫描方法、装置、终端及存储介质

文件扫描方法、装置、终端及存储介质

摘要

本发明提供了文件扫描方法、装置、终端及存储介质,通过接收用户的扫描指令,依据扫描指令获取树形结构待扫描对象;利用根线程对所述树形结构待扫描对象进行扫描;在扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;利用多线程,对树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。利用多线程,对所述树形结构待扫描对象中的目录以及文件进行并行扫描,提高扫描速度;在扫描到的目录数量大于等于预设阈值的情况下,才会启用预先创建的多线程执行并行扫描,能够充分利用预先创建的多线程,避免线程浪费,节省资源消耗。

著录项

  • 公开/公告号CN112286878A

    专利类型发明专利

  • 公开/公告日2021-01-29

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;

    申请/专利号CN201910673694.8

  • 发明设计人 封湘衡;

    申请日2019-07-24

  • 分类号G06F16/16(20190101);G06F16/901(20190101);

  • 代理机构44285 深圳市深佳知识产权代理事务所(普通合伙);

  • 代理人王仲凯

  • 地址 518000 广东省深圳市南山区高新区科技中一路腾讯大厦35层

  • 入库时间 2023-06-19 09:41:38

说明书

技术领域

本发明涉及计算机技术领域,更具体的说,是涉及一种文件扫描方法、装置、终端及存储介质。

背景技术

在需要对文件夹中的文件进行展示或查找某一类型的文件的情况下,都需要对文件夹以及文件进行扫描,从而从扫描结果中获取需要展示或查找的文件,通常采用的文件扫描方式为递归扫描方式,递归扫描方式主要是将所有需要扫描的文件夹以及文件加载到内存中,然后按照预先设置的递归算法循环执行扫描过程,从而实现对所有文件夹以及文件的扫描,得到扫描结果。

但是,递归扫描方式每次只能针对一个扫描对象进行扫描,在需要进行扫描的扫描对象数量比较多的情况下,递归扫描方式明显存在扫描速度慢的问题。

基于此,如何提高扫描速度,成为目前需要解决的技术问题。

发明内容

有鉴于此,本发明提供了一种文件扫描方法、装置、终端及存储介质,来提高扫描速度。

为实现上述目的,一方面,本申请提供了一种文件扫描方法,所述方法包括:

接收用户的扫描指令,依据所述扫描指令获取树形结构待扫描对象,所述树形结构待扫描对象中至少包括:待扫描的目录以及文件;

利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值;

在扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;

利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。

又一方面,本申请还提供了一种文件扫描装置,包括:

扫描指令接收单元,用于接收用户的扫描指令;

树形结构待扫描对象获取单元,用于依据所述扫描指令获取树形结构待扫描对象,所述树形结构待扫描对象中至少包括:待扫描的目录以及文件;

第一扫描单元,用于利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值;

多线程启用单元,用于在判断出扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;

第二扫描单元,用于利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。

又一方面,本申请还提供了一种终端,包括:

处理器和存储器;

所述处理器,用于调用并执行所述存储器中存储的程序;

所述存储器用于存储所述程序,所述程序至少用于:

接收用户的扫描指令,依据所述扫描指令获取树形结构待扫描对象,所述树形结构待扫描对象中至少包括:待扫描的目录以及文件;

利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值;

在扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;

利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。

又一方面,本申请还提供了一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上所述的文件扫描方法。

经由上述的技术方案可知,与现有技术相比,本发明提供了一种文件扫描方法、装置、终端及存储介质,通过接收用户的扫描指令,依据所述扫描指令获取树形结构待扫描对象,所述树形结构待扫描对象中至少包括:待扫描的目录以及文件;利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值;在扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。本申请可以在扫描到的目录数量大于等于预设阈值的情况下,利用多线程,对所述树形结构待扫描对象中的目录以及文件进行并行扫描,与现有技术中每次只能针对一个扫描对象进行扫描的方式相比,明显提高扫描速度;并且,本申请可以利用根线程对树形结构待扫描对象进行扫描,来判断扫描到的目录数量是否大于等于预设阈值,并在扫描到的目录数量大于等于预设阈值的情况下,才会启用预先创建的多线程执行并行扫描,从而能够充分利用预先创建的多线程,避免线程浪费,节省资源消耗。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的终端的一种组成结构示意图;

图2为本发明实施例提供的一种文件扫描方法的流程图;

图3为本发明实施例提供的另一种文件扫描方法的流程图;

图4为本发明实施例提供的树形结构X文件夹示意图;

图5为本发明实施例提供的查找结果展示界面示意图;

图6为本发明实施例提供的一种文件扫描装置的组成结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

由于现有技术中采用的是递归扫描方式对扫描对象执行扫描操作,但由于递归扫描方式实际上是一种单线程扫描方式,每次只能针对一个扫描对象进行扫描,只有在对前一个扫描对象扫描完成之后,才能开启对下一个扫描对象执行的扫描任务,很明显,在需要进行扫描的扫描对象数量比较多的情况下,这种串行的扫描方式明显存在扫描速度慢的问题。

为了解决现有技术中递归扫描方式存在的扫描速度慢的问题,本申请提出了一种多线程的并行扫描方式,在需要进行扫描的扫描对象数量比较多的情况下,利用多线程,对所述树形结构待扫描对象中的目录以及文件进行并行扫描,与现有技术中每次只能针对一个扫描对象进行扫描的方式相比,明显提高扫描速度。

本方案发明人进一步研究发现,在需要进行扫描的扫描对象数量比较少的情况下,如果也利用多线程进行扫描的话,会存在有些线程处于空闲状态,会造成线程的浪费,而每条线程都会占用中央处理器的相应资源,从而造成资源浪费,为了解决这一问题,本方案发明人对方案进一步改进,通过利用根线程对所述树形结构待扫描对象进行扫描,来判断扫描到的目录数量是否大于等于预设阈值,在扫描到的目录数量大于等于预设阈值的情况下,说明需要进行扫描的扫描对象数量比较多,这种情况下才会启用预先创建的多线程执行并行扫描;如果扫描完所有的扫描对象之后,判断得出扫描到的目录数量仍然小于预设阈值,说明扫描对象数量比较少,无需启用多线程扫描,通过根线程即可完成扫描任务,得到扫描结果。通过本申请上述技术方案能够充分利用预先创建的多线程,避免线程浪费,节省资源消耗。

本申请的方案可以适用于手机、平板电脑、台式机等终端。

为了便于理解,先对本申请实施例的文件扫描方法所适用的终端进行介绍。如图1所示,其示出了本申请的方案所适用的终端的一种组成结构示意图。在图1中,该终端100可以包括:处理器101和存储器102。

该终端100还可以包括:通信接口103、输入单元104和显示器105和通信总线106。

处理器101、存储器102、通信接口103、输入单元104、显示器105、均通过通信总线106完成相互间的通信。

在本申请实施例中,该处理器101,可以为中央处理器(Central ProcessingUnit,CPU),现成可编程门阵列(FPGA)或者其他可编程逻辑器件等。

该处理器可以调用存储器102中存储的程序,具体的,可以处理器可以执行以下方法实施例中终端侧所执行的操作。

存储器102中用于存放一个或者一个以上程序,程序可以包括程序代码,所述程序代码包括计算机操作指令,在本申请实施例中,该存储器中至少存储有用于实现以下功能的程序:

接收用户的扫描指令,依据所述扫描指令获取树形结构待扫描对象,所述树形结构待扫描对象中至少包括:待扫描的目录以及文件;

利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值;

在扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;

利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。

在一种可能的实现方式中,该存储器102可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、以上所提到的程序等;存储数据区可存储根据终端的使用过程中所创建的数据。

此外,存储器102可以包括高速随机存取存储器,还可以包括非易失性存储器等。该通信接口103可以为通信模块的接口,如GSM模块的接口。该输入单元可以包括感应触摸显示面板上的触摸事件的触摸感应单元、键盘等等。该显示器104包括显示面板,如触摸显示面板等。

当然,图1所示的终端结构并不构成对本申请实施例中终端的限定,在实际应用中终端可以包括比图1所示的更多或更少的部件,或者组合某些部件。

结合以上内容,对本申请的文件扫描方法进行介绍。

如图2,其示出了本申请一种文件扫描方法一个实施例的流程示意图,本实施例应用于如上所提到的终端,本实施例包括:

S200、接收用户的扫描指令,依据所述扫描指令获取树形结构待扫描对象;

用户的扫描指令可以为用户触发的文件查找指令,还可以为文件展示指令,当用户的扫描指令为文件查找指令时,用户的扫描指令中则至少携带有待查找的文件标识,则后续在扫描过程中则会依据待查找的文件标识进行扫描,得到与待查找的文件标识相匹配的扫描结果并返回给用户。当用户的扫描指令为文件展示指令时,用户的扫描指令中则至少携带有待展示的文件标识,则后续在扫描过程中则会依据待展示的文件标识进行扫描,得到与待展示的文件标识相匹配的扫描结果并返回给用户。

可选的,用户的扫描指令中还可以携带待扫描对象范围,即用户可以指定待扫描对象的范围,例如某个固定的磁盘或者某个固定的文件夹等,本申请并不做具体限定。如果用户的扫描指令中不携带待扫描对象范围,则可以默认待扫描对象范围为所有磁盘。

树形结构待扫描对象在本申请实施例中指的是待扫描的目录以及文件,目录指的是文件夹,目录之中既可以包含子目录、又可以包含文件、还可以是两者的结合,本申请并不做具体限定。

树形结构指的是数据元素之间存在着“一对多”的树形关系的数据结构。

需要说明的是,所述树形结构待扫描对象中至少包括:待扫描的目录以及文件。树形结构待扫描对象从根节点开始,到叶子节点终止,根节点一般情况下为根目录,如果待扫描对象仅为一个文件的情况下,根节点就是叶子节点也就是这一个文件。叶子节点为文件。

S210、利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值;

根线程为一条单线程,主要是从所述树形结构待扫描对象中的根目录开始,按照所述树形结构待扫描对象的结构,利用根线程对所述树形结构待扫描对象中包含的待扫描的目录以及文件逐一进行扫描,判断扫描到的目录数量是否大于等于预设阈值。

预设阈值可以为本领域技术人员依据实际情况设定的值,还可以为本领域技术人员预先设定的多线程总数等,本申请并不做具体限定。

在预设阈值为预先设定的多线程总数的情况下,利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值的过程可以包括:从所述树形结构待扫描对象中的根目录开始,按照所述树形结构待扫描对象的结构,利用根线程对所述树形结构待扫描对象中包含的待扫描的目录以及文件逐一进行扫描,判断扫描到的目录数量是否大于等于预先设定的多线程总数。

可选的,在利用根线程对所述树形结构待扫描对象进行扫描的过程中,可以通过对文件名的识别来过滤排除隐藏文件,例如:由于隐藏文件都是以“.”开头,在利用根线程扫描到以“.”开头的文件名就跳过不扫描,并不会将其添加到文件集合中。

S220、在扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;

在扫描到的目录数量大于等于预设阈值的情况下,说明需要进行扫描的扫描对象数量比较多,则启用预先创建的多线程,创建多线程任务,并将创建的多线程任务提交到线程池中进行多线程扫描。

S230、利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。

利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到与用户的扫描指令对应的扫描结果,并将扫描结果返回给用户。

本申请可以在扫描到的目录数量大于等于预设阈值的情况下,利用多线程,对所述树形结构待扫描对象中的目录以及文件进行并行扫描,与现有技术中每次只能针对一个扫描对象进行扫描的方式相比,明显提高扫描速度;并且,本申请可以利用根线程对树形结构待扫描对象进行扫描,来判断扫描到的目录数量是否大于等于预设阈值,并在扫描到的目录数量大于等于预设阈值的情况下,说明需要进行扫描的扫描对象数量比较多,单线程扫描会导致扫描速度慢,才会启用预先创建的多线程执行并行扫描,从而能够充分利用预先创建的多线程进行扫描,扫描过程中不会出现线程浪费的现象,节省资源消耗。如果扫描完所有的扫描对象之后,判断得出扫描到的目录数量仍然小于预设阈值,说明扫描对象数量比较少,无需启用多线程扫描,通过根线程即可完成扫描任务。

本申请还提供了另外一种文件扫描方法,该扫描方法如图3,其示出了本申请另一种文件扫描方法一个实施例的流程示意图,本实施例应用于如上所提到的终端,本实施例包括:

S300、接收用户的扫描指令,依据所述扫描指令获取树形结构待扫描对象;

所述树形结构待扫描对象中至少包括:待扫描的目录以及文件。

S310、从所述树形结构待扫描对象中的根目录开始,按照所述树形结构待扫描对象的结构,利用根线程对树形结构待扫描对象中包含的待扫描的目录以及文件逐一进行扫描;

由于树形结构待扫描对象中包含的是目录以及文件的集合,本申请可以从根目录开始,逐层对树形结构待扫描对象中包含的待扫描的目录以及文件进行扫描,在对每层待扫描的目录以及文件进行扫描的过程中,可以按照从左到右的顺序进行扫描,还可以按照从右到左的顺序进行扫描,本申请并不做具体限定。

S320、每扫描到一个目录,则将扫描到的目录添加到目录队列中,并将扫描到的文件添加到文件集合中;

目录队列用于存储扫描到的目录,目录队列中的目录按照目录被扫描到的顺序排列,先扫描到的目录排在目录队列前面,后扫描到的目录排在目录队列后面,需要说明的是,目录队列中具体可以存储扫描到的目录的存储路径。

需要说明的是,扫描到的文件添加到以线程号为关键词的文件集合中,集合的值为保存了文件信息的List列表。线程号可以为扫描该文件的线程对应的线程号。

S330、判断目录队列中的目录数量是否大于等于预先设定的多线程总数;在目录队列中的目录数量大于等于预先设定的多线程总数的情况下,执行步骤S340;在扫描完所有的扫描对象之后,目录队列中的所有目录数量小于预先设定的多线程总数的情况下,无需启用多线程扫描,利用根线程得到扫描结果。

本申请在通过根线程对树形结构待扫描对象中包含的待扫描的目录以及文件逐一进行扫描,并将扫描到的目录添加到目录队列的过程中,会实时判断目录队列中的目录数量是否大于等于预先设定的多线程总数,如果目前判断得出目录队列中的目录数量小于预先设定的多线程总数,则会利用根线程继续对树形结构待扫描对象中包含的待扫描的目录以及文件逐一进行扫描,直到判断目录队列中的目录数量大于等于预先设定的多线程总数的时候结束扫描,或者直到扫描完所有的扫描对象之后,目录队列中的所有目录数量仍然小于预先设定的多线程总数的情况下结束扫描。

本申请中多线程总数的设定过程包括:依据终端中的中央处理器的核数,设定对树形结构待扫描对象执行扫描操作的多线程总数。

通过获取终端当前可用的中央处理器核数,来设定对树形结构待扫描对象执行扫描操作的多线程总数。在设定多线程总数的过程中,需要考虑中央处理器的性能。由于不同的终端可能会有不同的中央处理器核数,如果多线程总数与核数相同,可以让每一个中央处理器都达到处在良好的工作状态,也就是负载均衡状态,这种情况下中央处理器的性能才能完全的发挥出来,扫描速度也就最优的。

可选的,为了综合考虑多线程扫描速度以及中央处理器的性能,可以根据实际需要预先设定最小的多线程总数,例如:对单核中央处理设定最小多线程总数为4个。

需要说明的是,由于一般在扫描过程中,需要扫描的待扫描对象的数量要远远大于多线程的数量,因此在判断目录队列中的目录数量大于等于预先设定的多线程总数的情况下,说明有必要启动多线程进行扫描。

由于在扫描完所有的扫描对象之后,目录队列中的所有目录数量仍然小于预先设定的多线程总数的情况下,说明扫描对象数量比较少,无需启用多线程扫描,此时利用根线程已经完成了对所有扫描对象的扫描,并得到了扫描结果,此时将根线程扫描得到的扫描结果返回给用户。

S340、利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描;

需要说明的是,利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描的过程是对目录队列中存储的目录依次进行扫描的过程。

具体扫描过程为:从所述多线程中选取一个空闲线程,作为目标线程;利用所述目标线程,按照目录队列中目录的存入顺序,依次选取一个待扫描目标目录;利用所述目标线程对选取的一个待扫描目标目录进行扫描。

由于目录队列中目录的进出顺序为先进先出,先存入目录队列中的目录则优先被多线程选取出进行扫描,扫描速度快。

可选的,本申请在从所述多线程中选取一个空闲线程,作为目标线程之后,则将该目标线程提交到线程池中,通过目标线程可以循环监听目录队列是否为空,为空时,则任务终止,不为空时,则按照目录队列中目录的存入顺序,选取待扫描目标目录,对选取的待扫描目标目录进行扫描。

当多线程中没有空闲线程的情况下,则等待空闲线程的出现,多线程中的每一个线程都可以循环利用来执行扫描任务,每完成一次扫描任务,则将该扫描任务释放掉,重新选取一个目标目录进行扫描。

S350、将扫描到的目录继续添加在目录队列中,并将扫描到的文件继续添加到文件集合中,将文件集合中的文件作为扫描结果并返回给用户。

本申请实施例中会将多线程中的每一个线程扫描到的目录继续添加在目录队列中,并将多线程中的每一个线程扫描到的文件继续添加到文件集合中,将文件集合中的文件作为扫描结果并返回给用户。

需要说明的是,本申请在启用预先创建的多线程之后,在利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描的过程中,会利用根线程对多线程扫描过程进行监控;当监控到多线程对树形结构待扫描对象扫描完成之后,获取文件集合中包含的多线程中每个线程扫描过程中得到的扫描结果;依据多线程中每个线程扫描过程中得到的扫描结果,获取对树形结构待扫描对象进行扫描的最终扫描结果,并将最终扫描结果返回给用户。

可选的,根线程对多线程扫描过程进行监控的方式为监控目录队列是否为空,当监控到目录队列为空时,说明监控到多线程对树形结构待扫描对象扫描完成。根线程通过将多线程中每个线程扫描过程中得到的扫描结果进行合并,并从合并后的扫描结果中选取与用户的扫描指令对应的扫描结果(例如包含与文件查找指令对应的用户想要查找的文件或者与文件展示指令对应的用户想要展示的文件),并将其作为最终扫描结果,将最终扫描结果返回给用户。

本申请实施例中在扫描完成之后,单独通过根线程来对多线程中每个线程扫描过程中得到的扫描结果进行汇总,得到最终的扫描结果,从而使得扫描结果汇总过程不会对线程扫描过程造成影响,进一步提高扫描速度。

由于现有技术中的递归扫描方式要将所有需要扫描的对象一次性加载到内存中,才能执行后续的扫描过程,将要扫描的对象一次性加载到内存中对内存的方式明显存在内存占用量大的问题。通过本申请实施例,可以利用所述目标线程,按照目录队列中目录的存入顺序,依次选取一个待扫描目标目录进行扫描的方式中,并不需要将全部的扫描对象都加载到内存中,只需要加载目标线程需要扫描的目标目录即可,在扫描完成之后,即进行内存释放,内存占用量明显减少。

为了便于理解本申请的方案,下面以查找文件夹X中以a开头的所有文件的场景为例对本申请的方案进行介绍:

1、接收用户输入的按类别显示文件夹中的所有文件的指令,依据所述指令确定待扫描对象的范围为X文件夹,将X文件夹按照树形结构生成,得到树形结构X文件夹,如图4所示树形结构X文件夹示意图;

2、预先设定多线程总数为2;

3、利用根线程对所述树形结构待扫描对象进行扫描,首先扫描根目录A,将扫描到的目录B与目录C添加到目录队列中,并将扫描到的文件c、文件a、文件b添加到文件集合中;

4、判断得出目前扫描到的目录数量已经达到了预先设定的多线程总数2,启用预先创建的多线程:线程一与线程二,并创建线程任务:任务1与任务2,并将任务1与任务2提交到线程池中;

5、利用线程一对应的任务1来扫描目录B,将扫描得到的目录AA继续添加到目录队列中,并将扫描得到的文件aa以及文件bb继续添加到文件集合中;

6、利用线程二对应的任务2来扫描目录C,将扫描得到的目录CC以及目录DD继续添加到目录队列中,并将扫描得到的文件ee以及文件ff继续添加到文件集合中;此时,目录队列中的目录包含目录AA、目录CC以及目录DD;

7、利用对目录B扫描完成的线程一对应的任务1来扫描目录队列中的目录AA,将扫描得到的文件aaa继续添加到文件集合中;

8、利用对目录C扫描完成的线程二对应的任务2来扫描目录队列中的目录CC;将扫描得到的目录CCC继续添加到目录队列中,并将扫描得到的文件cc继续添加到文件集合中;此时,目录队列中的目录包含目录DD以及目录CCC;

9、利用对目录AA扫描完成的线程一对应的任务1来扫描目录DD,将扫描得到的目录EEE继续添加到目录队列中;

10、利用对目录CC扫描完成的线程二对应的任务2来扫描目录CCC;将扫描得到的文件caa、文件cbb、文件ccc、文件cdd继续添加到文件集合中;此时,目录队列中的目录包含目录EEE;

11、利用对目录DD扫描完成的线程一对应的任务1来扫描目录EEE;将扫描得到的文件eee以及文件fff继续添加到文件集合中;

12、判断得出目录队列中为空,扫描完成,线程一以及线程二退出;

得到文件集合中的扫描结果:文件c、文件a、文件b、文件aa、文件bb、文件ee、文件ff、文件aaa、文件cc、文件caa、文件cbb、文件ccc、文件cdd、文件eee、文件fff;

13、从上述文件集合中的扫描结果中选取出文件夹X中以a开头的所有文件为:文件a、文件aa、文件aaa;并将文件a、文件aa、文件aaa展示在如图5所示的查找结果展示界面中,并在如图5所示的查找结果展示界面中展示扫描结果用时信息。

对应本申请的一种文件扫描方法,本申请还提供了一种文件扫描装置。如图6所示,其示出了本申请一种文件扫描装置的一种组成结构示意图,本实施例的装置可以应用于前面提到的终端,该装置可以包括:

扫描指令接收单元100,用于接收用户的扫描指令;

树形结构待扫描对象获取单元110,用于依据所述扫描指令获取树形结构待扫描对象,所述树形结构待扫描对象中至少包括:待扫描的目录以及文件;

第一扫描单元120,用于利用根线程对所述树形结构待扫描对象进行扫描,判断扫描到的目录数量是否大于等于预设阈值;

多线程启用单元130,用于在判断出扫描到的目录数量大于等于预设阈值的情况下,启用预先创建的多线程;

第二扫描单元140,用于利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描,得到扫描结果并返回给用户。

在一种可能的实现方式中,第一扫描单元包括:

第一扫描子单元,用于从所述树形结构待扫描对象中的根目录开始,按照所述树形结构待扫描对象的结构,利用根线程对所述树形结构待扫描对象中包含的待扫描的目录以及文件逐一进行扫描,判断扫描到的目录数量是否大于等于预先设定的多线程总数。

在一种可能的实现方式中,第一扫描子单元包括:

第三扫描单元,用于从所述树形结构待扫描对象中的根目录开始,按照所述树形结构待扫描对象的结构,利用根线程对所述树形结构待扫描对象中包含的待扫描的目录以及文件逐一进行扫描;

添加单元,用于每扫描到一个目录,则将扫描到的目录添加到目录队列中,并将扫描到的文件添加到文件集合中;

判断单元,用于判断目录队列中的目录数量是否大于等于预先设定的多线程总数。

在一种可能的实现方式中,所述扫描装置还包括:多线程总数设定单元,所述多线程总数设定单元用于依据终端中的中央处理器的核数,设定对树形结构待扫描对象执行扫描操作的多线程总数。

在一种可能的实现方式中,第二扫描单元包括:

第四扫描单元,用于利用多线程,对所述树形结构待扫描对象中未被扫描到的目录以及文件继续进行扫描;

扫描结果返回单元,用于将扫描到的目录继续添加在目录队列中,并将扫描到的文件继续添加到文件集合中,将文件集合中的文件作为扫描结果并返回给用户。

在一种可能的实现方式中,第四扫描单元包括:

目标线程选取单元,用于从所述多线程中选取一个空闲线程,作为目标线程;

待扫描目标目录选取单元,用于利用所述目标线程,按照目录队列中目录的存入顺序,依次选取一个待扫描目标目录;

第四扫描子单元,用于利用所述目标线程对选取的一个待扫描目标目录进行扫描。

在一种可能的实现方式中,所述扫描装置还包括:

监控单元,用于利用根线程对多线程扫描过程进行监控;

扫描结果获取单元,用于当监控到多线程对树形结构待扫描对象扫描完成之后,获取文件集合中包含的多线程中每个线程扫描过程中得到的扫描结果;

最终扫描结果返回单元,用于依据多线程中每个线程扫描过程中得到的扫描结果,获取对树形结构待扫描对象进行扫描的最终扫描结果,并将最终扫描结果返回给用户。

另一方面,本申请还提供了一种存储介质,该存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上任意一个实施例中的文件扫描方法。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号