CN106874370A - 一种目录文件的快速检索方法 - Google Patents
一种目录文件的快速检索方法 Download PDFInfo
- Publication number
- CN106874370A CN106874370A CN201611262370.8A CN201611262370A CN106874370A CN 106874370 A CN106874370 A CN 106874370A CN 201611262370 A CN201611262370 A CN 201611262370A CN 106874370 A CN106874370 A CN 106874370A
- Authority
- CN
- China
- Prior art keywords
- subdirectory
- thread
- file
- address
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种目录文件的快速检索方法,设置消息接收模块和线程处理模块,所述检索方法包括如下步骤:步骤1,主进程对根目录地址的下一级进行扫描,查找到目标文件则结束并返回,当发现子目录则向消息接收模块发送特定消息,并将子目录地址传递给消息接收模块;步骤2,消息接收模块接收到特定消息后,创建新线程,并将接收到的子目录地址参数传送至线程处理模块;步骤3,线程处理模块对子目录的下一级进行扫描,若查找到目标文件则将目标文件地址返回给主进程,并结束线程检索方法流程,并释放线程资源;步骤4,重复步骤2‑3,直至查找到目标文件。此种检索方法可充分利用系统的资源与回收,缩短检索/遍历消耗时间。
Description
技术领域
本发明属于信息检索技术领域,特别涉及一种基于多线程技术的目录文件检索方法。
背景技术
目前,随着电子技术的飞速发展,办公往往不可能脱离电脑,我们通常需要保留重要的文件,书写记录显然是耗时耗力的,电脑便成为了我们日常生活中存储文件的重要容器。当今,随着文件规模的壮大,人们已经不再满足于将文件存储在本地电脑上(受存储空间的限制),于是,各类网络文档管理系统层出不穷。为了提高企业(单位)员工的工作效率和信息安全,大部分企业(单位)都对员工的办公文件进行一定的管控,不可避免地会需要将本地终端文件上传/备份到服务器,这就意味着需要有一个存放大量文件的文件仓库。
于是,为了满足从一个复杂目录的文件仓库中检索或遍历文件的方便快速,我们通常想尽办法去提高文件的检索效率,简而言之是为了能够对于在一个无序的文件仓库中的操作尽可能地减少所花费的时间。通常,当我们试图检索/遍历一个目录的时候,最开始且最低效的做法是定义一个通过目录参数查找下级子目录和文件的递归方法,这种方法无法充分地利用系统资源且无法从细节处提升一定的效率,之后,有人发明了多线程的使用,意味着电脑程序可以同步进行多件事,这大大提高了程序的工作效率以及实现方法的开拓。我们不禁想到多线程技术可以使文件检索/遍历的效率大幅提升,但是如何最大化地利用多线程的优势,最大地提升文件系统的检索/遍历效率,已经成为当前重要的研究方向。
对于一个多层级的复杂目录结构,现有方案是预先创建好固定数目的线程池,扫描顶层目录的下一级目录后,将扫描到的子目录作为子任务投递到线程池中某个空闲的线程中,进行任务目录(上级扫描到的子目录)的文件扫描及再次扫描到子目录进行重复投递处理。
现有方案具有以下不足:
(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,直至查找到目标文件,结束检索流程将结果正确地返回给查询人。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (7)
1.一种目录文件的快速检索方法,其特征在于:设置消息接收模块和线程处理模块,所述检索方法包括如下步骤:
步骤1,主进程对根目录地址的下一级进行扫描,查找到目标文件则结束并返回,当发现子目录则向消息接收模块发送特定消息,并将子目录地址传递给消息接收模块;
步骤2,消息接收模块接收到特定消息后,创建新线程,并将接收到的子目录地址参数传送至线程处理模块;
步骤3,线程处理模块对子目录的下一级进行扫描,若查找到目标文件则将目标文件地址返回给主进程,并结束线程检索方法流程,并释放线程资源;
步骤4,重复步骤2-3,直至查找到目标文件。
2.如权利要求1所述的一种目录文件的快速检索方法,其特征在于:所述步骤1的详细内容是,主进程以根目录地址为参数对目标目录地址的下一级进行扫描,若查找到目标文件则将目标文件地址作为方法函数返回值返回,结束检索流程;若没有找到目标文件,则将每次查找到的子目录Ai循环向消息接收模块发送特定消息,同时将查找到的子目录Ai地址参数传送至消息接收模块,其中,i=1,2,…,n,且A1-An为目录标识,n为根目录下一级的目录节点数量。
3.如权利要求1所述的一种目录文件的快速检索方法,其特征在于:所述步骤2中,消息接收模块接收到特定消息后,从缓存获取一块内存块创建新线程并得到相应的线程号。
4.如权利要求1所述的一种目录文件的快速检索方法,其特征在于:所述步骤3中,若线程处理模块查找到目标文件,则将目标文件地址存入公共变量返回给主进程。
5.如权利要求1所述的一种目录文件的快速检索方法,其特征在于:所述步骤3中,若线程处理模块未查找到目标文件,则将每次查找到的子目录Bj循环向消息接收模块发送特定消息,同时将查找到的子目录Bj的地址参数传送至消息接收模块,其中,j=1,2,…,m,且B1-Bm为目录标识,m为该子目录下一级的目录节点数量。
6.如权利要求5所述的一种目录文件的快速检索方法,其特征在于:所述步骤4中,消息接收模块从缓存获取一块内存块创建新线程并得到相应的线程号,将接收到的子目录Bj地址参数传送至线程处理模块,重复步骤2-3,直至查找到目标文件,结束检索流程并返回。
7.如权利要求1所述的一种目录文件的快速检索方法,其特征在于:所述步骤3中,当子目录的下一级扫描完毕后,结束扫描,释放线程资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611262370.8A CN106874370A (zh) | 2016-12-30 | 2016-12-30 | 一种目录文件的快速检索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611262370.8A CN106874370A (zh) | 2016-12-30 | 2016-12-30 | 一种目录文件的快速检索方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106874370A true CN106874370A (zh) | 2017-06-20 |
Family
ID=59164640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611262370.8A Pending CN106874370A (zh) | 2016-12-30 | 2016-12-30 | 一种目录文件的快速检索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106874370A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107301352A (zh) * | 2017-06-22 | 2017-10-27 | 郑州云海信息技术有限公司 | 一种权限设置的方法及装置 |
CN108491549A (zh) * | 2018-04-09 | 2018-09-04 | 深圳市茁壮网络股份有限公司 | 一种分布式存储系统中文件目录的创建方法及装置 |
CN110784528A (zh) * | 2019-10-22 | 2020-02-11 | 北京天融信网络安全技术有限公司 | 一种文件下载方法、装置和存储介质 |
CN110825699A (zh) * | 2019-11-08 | 2020-02-21 | 北京天地和兴科技有限公司 | 一种在c#程序中快速统计磁盘文件数量的方法 |
CN111223571A (zh) * | 2020-01-06 | 2020-06-02 | 中国人民解放军总医院 | 药品不良反应监测方法及装置、计算机设备及存储介质 |
CN116089364A (zh) * | 2023-04-11 | 2023-05-09 | 山东英信计算机技术有限公司 | 一种存储文件管理方法、装置、ai平台和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101526948A (zh) * | 2009-04-23 | 2009-09-09 | 山东中创软件商用中间件股份有限公司 | 多线程文件遍历技术 |
-
2016
- 2016-12-30 CN CN201611262370.8A patent/CN106874370A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101526948A (zh) * | 2009-04-23 | 2009-09-09 | 山东中创软件商用中间件股份有限公司 | 多线程文件遍历技术 |
Non-Patent Citations (1)
Title |
---|
孙皓: "《VisualC++范例大全》", 31 March 2009, 机械工业出版社 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107301352A (zh) * | 2017-06-22 | 2017-10-27 | 郑州云海信息技术有限公司 | 一种权限设置的方法及装置 |
CN108491549A (zh) * | 2018-04-09 | 2018-09-04 | 深圳市茁壮网络股份有限公司 | 一种分布式存储系统中文件目录的创建方法及装置 |
CN108491549B (zh) * | 2018-04-09 | 2022-02-01 | 深圳市茁壮网络股份有限公司 | 一种分布式存储系统中文件目录的创建方法及装置 |
CN110784528A (zh) * | 2019-10-22 | 2020-02-11 | 北京天融信网络安全技术有限公司 | 一种文件下载方法、装置和存储介质 |
CN110825699A (zh) * | 2019-11-08 | 2020-02-21 | 北京天地和兴科技有限公司 | 一种在c#程序中快速统计磁盘文件数量的方法 |
CN111223571A (zh) * | 2020-01-06 | 2020-06-02 | 中国人民解放军总医院 | 药品不良反应监测方法及装置、计算机设备及存储介质 |
CN116089364A (zh) * | 2023-04-11 | 2023-05-09 | 山东英信计算机技术有限公司 | 一种存储文件管理方法、装置、ai平台和存储介质 |
CN116089364B (zh) * | 2023-04-11 | 2023-07-14 | 山东英信计算机技术有限公司 | 一种存储文件管理方法、装置、ai平台和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106874370A (zh) | 一种目录文件的快速检索方法 | |
CN104636469B (zh) | 文件自动分类管理方法和系统 | |
CN100339855C (zh) | 内容管理系统 | |
RU2581560C2 (ru) | Способ сканирования файлов, клиентский компьютер и сервер | |
US20090006391A1 (en) | Automatic categorization of document through tagging | |
US20150199433A1 (en) | Method and system for search engine indexing and searching using the index | |
CN101079902A (zh) | 海量数据分级存储方法 | |
CN1811757A (zh) | 用于定位万维网页以及计算机网络文件的系统和方法 | |
CN104679778A (zh) | 一种搜索结果的生成方法及装置 | |
CN1955958A (zh) | 一种基于目录树的分类数据存储及分类目录查询方法 | |
CN1752888A (zh) | 用于移动/智能终端的病毒特征提取和检测系统及方法 | |
US20130198308A1 (en) | Method and apparatus for distributing published messages | |
CN1831825A (zh) | 文档管理方法和装置以及文档搜索方法和装置 | |
US7536512B2 (en) | Method and apparatus for space efficient identification of candidate objects for eviction from a large cache | |
CN113326264A (zh) | 数据处理方法、服务器及存储介质 | |
CN101060539A (zh) | 采用统一入口网站地址集成和推送多网站内容的方法及系统 | |
CN1549130A (zh) | 一种文件同步的方法 | |
CN115576899A (zh) | 构建索引的方法和装置以及文件查找方法和装置 | |
CN101056338A (zh) | 使用自主数据管理的个性化信息生存周期管理服务方法 | |
CN1719769A (zh) | 在网络设备中对接收数据包进行分类的方法 | |
CN1949732A (zh) | 网络社区与搜索的结合的方法以及系统 | |
US9760836B2 (en) | Data typing with probabilistic maps having imbalanced error costs | |
CN105426544A (zh) | 监控数据库状态的方法及装置 | |
CN101702180B (zh) | 一种关联字段值的查找方法及系统 | |
CN107122412A (zh) | 一种海量电话号码快速匹配检索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170620 |