专利名称:一种单向多映射文件匹配方法
技术领域:
本发明涉及文件匹配技术,尤其涉及一种单向多映射匹配关系的文件匹配 方法。
背景技术:
目前,在查找文件时大多使用系统自带的文件搜索工具。如果需要针对目
录A下的所有文件在目录B下寻找所有匹配文件,基于这种工具的做法是对于 目录A下的每一个文件,在目录B下都做一次全目录匹配;这种匹配的缺点主 要表现在以下几个方面;
1,系统自带文件搜索工具不能自动对目录A下的每一个文件做检索,需 要手动启动每一次4企索操作;
2,系统自带文件搜索工具对磁盘访问速度和文件系统的效率有很强的依 赖,当目录B中的文件数达到或超过一定数量(如10000)时,这种方法的效 率极其低下;
3,系统自带文件搜索工具只能对文件名进行匹配,对文件内容的一致性 没有判断,只能事后人为判断,不能满足文件匹配的需求。
4,在软件开发的领域,软件的维护可能经常需要去定位几个有问题的库 文件或脚本文件,对于大型软件而言,开发包中的源码文件和编译生成文件数 量十分庞大,目录结构也很复杂,要找到一个文件的所有出现的地方,需要做 一次遍历,找到同名文件后还要过滤内容不同的文件,从而找到一个文件的真 正出处,而且每一个文件都需要进行一次这样的过程,执行的效率和准确度都 很低。
当前可用的文件匹配工具主要有以下2类第一类是针对文件做一致性比较的软件,典型的有winmerge;其缺点是 不能交叉比较不同目录结构下的文件。
第二类是针对目录结构及其所有文件进行比较的软件,典型的有 Beyond_Compare;其缺点是不能交叉比较不同目录结构下的文件。
由于现有的工具软件的功能限制,不能够实现针对目录结构不同的2个目 录下所有文件的交叉比较。
发明内容
有鉴于此,本发明的主要目的在于提供一种文件匹配方法,用于解决现有 技术中匹配效率低、匹配速度慢、缺乏内容一致性的验证以及不能进行不同目 录结构文件内容的交叉比较的技术问题,为达到上述目的,本发明的技术方案 是这样实现的
一种单向多射文件匹配方法,包括
A、 采集比对目录中的文件信息分别形成内存匹配对象;
B、 基于所述内存匹配对象执行文件名匹配;
C、 对文件名匹配成功的文件进行一致性驺4正; D 、输出 一致性—睑i正通过的文件信息。
进一步地,步骤A中,形成内存匹配对象的步骤具体为
Al、采集比对目录中的文件信息分别形成文件信息列表文件;
A2、从文件信息列表文件中读取文件信息分别在内存中建立内存匹配对象。
进一步地,所述文件信息至少包括文件名及相对和/或绝对路径,所述文件 信息列表文件为内存文件或磁盘文件。
进一步地,步骤A中,采集比对目录中的文件倌息具体为
对两个比对目录分别做广度优先的周游,针对每个比对目录下发现的每一 个文件记录文件名、相对路径和/或绝对路径,分别形成所述内存匹配对象。
进一步地,所述内存匹配对象为向量对象、数组对象或列表对象。
5进一步地,步骤B中,所述比对目录所对应的内存匹配对象分别为第一匹
配对象和第二匹配对象,匹配步骤为
循环从第一匹配对象中获取每个文件所对应的元素对象,并从所述元素对 象中读取文件名属性值,然后将其与第二匹配对象中的每个元素对象中的文件 名属性值进行比较,如果相等,则将这一对文件的文件名、绝对路径和/或相 对路径写入文件名匹配列表文件中。
进一步地,步骤A中,所述文件信息中包含文件大小,步骤C中,首先判 断文件名匹配成功的文件的文件大小是否一致,如果文件大小不一致则内容不 一致;否则继续执行内容一致性的验证。
进一步地,所述一致性—睑证是指对文件内容的一致性马全证,所述一致性验 证的步骤为
计算文件名称匹配成功的文件内容的MD5值,然后判断所述MD5值是否 相同;或,
对文件名称匹配成功的文件内容进行二进制的比对,判断二进制内容是否 相同。
进一步地,步骤D中,所述输出的一致性验证通过的文件信息的内容至少 包括文件名、相对和/或绝对路径。
从磁盘读取比对目录下的所有文件名称形成内存列表,然后在内存中进行文件 名称的匹配,对名称匹配成功的文件再进行内容的一致性验证。本发明能以极 小的磁盘读写开销进行大批量文件的匹配,效率极高,而且在提高匹配效率的 同时避免了重复磁盘访问从而延长了磁盘的使用寿命。
图1为本发明文件匹配的处理流程图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照 附图,对本发明进一步详细说明。
图1为本发明所述方法的步骤流程图,本实施例中两个比对目录分别为目
录A和目录B,目录A和目录B下的目录层次不受限制,目录A和目录B的 目录结构也可完全不一样,对目录A和目录B下的文件个数和文件类型也不做 限制。
步骤1:采集比对目录中的文件信息分别形成文件信息列表文件;
分别形成两个列表文件,文件信息至少包括文件名、绝对路径。形成的列表文 件可以是一 个内存文件也可以是一个磁盘文件。 采集比对目录A和B的文件信息的方式如下
对目录A做一次广度优先的周游,针对发现的每一个文件记录下文件名, 相对路径和/或绝对路径等文件信息,写入列表文件A.lst;
对目录B做一次广度优先的周游,针对发现的每一个文件记录下文件名, 相对路径和/或绝对路径等文件信息,写入列表文件B.lst;
该步骤中,如果目录A和/或目录B中的文件数较少,形成的列表文件所 占用内存空间较小的话,可以将形成的列表文件存储在内存当中,这样可以减 少磁盘读写,且在内存中操作速度快、效率高,如果需要保留备份可将其存成 文件。
步骤2:依据所述比对目录的文件信息分别生成内存匹配对象;
本步骤中将文件信息分別从两个文件信息列表文件中提取出来形成两个内
存匹配对象的目的是在内存中执行文件名称的匹配,所述内存对象可以是向量
对象、数组对象或列表对象等。
打开列表文件A.lst,提取目录A下的所有文件的文件名及路径信息存入内
存中的向量Vector A,每一个文件的文件信息为向量Vector—A中的一个向量元素。关闭列表文件A.lst,而Vector_A留在内存中等待运算;
打开列表文件B.lst,提取目录B下的所有文件的文件名及路径信息存入内
存中的向量Vector_B ,每一个文件的文件信息为向量Vector一B中的 一个向量元
素。关闭列表文件B.lst,而Vector—B留在内存中等待运算;
如果在步骤1中,不需要保存列表文件,则可直接在内存中生成向量
Vector—A和向量Vector—B ,这样执行效率会更高。 步骤3:基于所述内存匹配对象执行文件名匹配;
本步骤所述的文件名匹配是指单向多映射关系的匹配,即目录A中的每个 文件可能在目录B中拥有多个目标文件,且可能每个目标文件都位于不同的子
的文件名称匹配,从而获得文件名称匹配的匹配结果集,文件名称匹配可以是 完全相同或符合设定的匹配条件等。将匹配结果集存入列表文件Found.lst中。 如果列表文件不大可驻留内存。
以内存匹配对象采用向量为例,本步骤的扭J亍方法如下 循环弹出Vector_A向量元素,取出向量元素中的文件名属性值,然后与 Vector—B中的每个向量元素的文件名属性值进行比较,如果相等,则将这一对 文件的绝对路径及文件名称等内容写入列表文件Found.lst中; 针对Vector_A中的每一项mLstLine—A,重复上述4喿作; 步骤4:对文件名匹配成功的文件进行一致性验证,输出一致性验证通过 的文件信息;
本步骤的目的是对文件名称匹配的文件进行文件内容本身的比对,判断文 件内容是否相同,从而得到文件名称匹配且实际内容也完全一致的文件列表。
对文件内容一致性的验证可以采用对文件整体计算MD5值,然后比对所 得MD5值是否相同;或直接对文件内容进行二进制比对;或计算校验码然后 判断校验码是否相同;或提取文件信息(例如文件字节大小、文件修改时间等) 进行比对等。
以下以计算MD5值的比对方式为例进行说明步骤401、打开文件Found.lst,形成列表对象;
步骤402、从列表对象中提取一个包含目录A和目录B中文件名称相同的 文件的文件名、绝对路径等信息的列表项;
步骤403、通过绝对路径打开磁盘文件,计算列表项所对应的两个比对文 件的MD5 {直;
步骤404、如果两个文件的MD5值相同,就将这一对文件的路径信息和 MD5值作为一个列表项写入Pair.lst列表文件中;然后执行步骤402,直到处理 完Found. 1st中的所有列表项。
步骤405 、输出Pair.lst列表文件。
Pair.lst列表文件中,记录了目录A和目录B中所有同名且文件内容一致的 文件的射关系;
作为改进,本发明一优选的实施例在进行文件内容一致性验证时,首先判 断文件属性是否发生变化,如果变化则说明内容不一致,否则再执行内容一致 性的验证,所述文件属性指文件^"改时间、文件大小等能够标识文件发生变化 的文件属性。
本发明在步骤1中一次读取所有文件的文件信息,在步骤2中进行批量的 文件匹配处理,从而避免了对每一个文件进行匹配时读每次都得读取磁盘中文 件信息的操作,尤其是在目录B中的文件数量庞大的情况下,本发明的所述方 法的处理速度要远远高于传统的匹配方法。在文件数量小的情况下,列表文件 都可以内存文件的形式进行操作,使用完即可释放,从而进一步提高了处理的 速度和效率。此外,本发明不限制比对目录的目录结构,即使名称匹配且内容 一致的文件位于比对目录下完全不同的子目录中,通过本发明也可很快的找 到,而且可以通过输出的列表文件清楚的反映出文件之间的映射关系,大大节 省了开发人员在反向工程时查找相同文件的时间。
实施例1:
计算机环境单核3GHz CPU,内存512MB, 5400转IDE接口硬盘, FAT32文件系统;A目录下文件数是3512,占用空间约400MB,采用本发明的技术方法, 对目录A进行一次广度优先的遍历时间是1秒,生成的A.lst文件内容格式示 例如下
i开始时间2008-11-04 11:58:11 I绝对路径l相对路径|文件名 l文件总数3512
l结束时间:2008-11-04 11:58:12
B目录下文件数是464304 ,占用空间约29G,采用本发明的技术方法, 对目录B进行一次广度优先的遍历时间是162秒,生成的B.lst文件内容格式 示例如下
l开始时间2008-11-04 11:58:12
l绝对路径l相对路径l文件名
l文件总数464304
l结束时间2008-11-04 12:00:54
采用本发明的方法,对目录A和目录B进行同名文件匹配,发现9479对 同名文件,对9479对同名文件分别计算MD5,用去大约14分钟;
对同名文件的MD5值进行比较的时间是1秒;输出的Pair.lst文件格式示 例如下
l开始时间2008-11-04 12:14:29 l文件名IMD5l绝对路径B|绝对路径j
|MD5匹配的文件对数量9479 |MD5匹配的唯一文件数3391 l结束时间2008-11-04 12:14:30
通过本发明的方法,对目录A下3512个文^f牛中与目录B下464304个文 件进行比对后,发现有3391个文件找到了自己的全部出处,而用时总共约16 分钟。若釆用现有技术对目录A中的每一文件在目录B中进行一次检索和比 对,则至少大于3512*162/60=9482分钟,可见效果是非常明显的,提高了检索的效率和减低了对硬件的要求,同时节省了人力,让看似不能处理的任务也能 完成。
实施例2:
在做文件的备份与恢复的时候,通常会遇到这样的情况,即在本地硬盘的 D盘放了很多文件,而其中一部分已经在移动硬盘里有了备份,假如想将移动 硬盘里已经存在的文件从D盘移除,同时还要保证其他文件不受影响,不管是 通过现有文件同步工具还是通过通过人工,要将这些随机分布在D盘的淹没在 文件海洋中的文件——查找出来是一件非常费时费力的工作;有时候,在移动 硬盘里的一个文件,在D盘里会有多个相同文件对应,而且分散在不同的目录
,从而能快速找出所有在D盘中文件名称相同而且内容完全一致的存储于任何 目录下的文件,而且速度快、准确率高,避免了用户繁瑣的劳动。 实施例3:
一家软件公司发行的软件在使用过程中发现了缺陷,现场维护人员通过斗企 测工具发现缺陷是由一些动态链接库(dll)文件引起的,他们把问题文件的列 表传回了公司;技术人员需要对列表中提到的这些dll文件进行定位,由于这 些文件分散在源码目录下的不同模块中;为了找到这些文件在源代码目录中的 出处,可以通过本发明快速、高效的来完成才喿作工作。处理的步骤如下
(1)把这些有问题的dll文件从安装目录里找出来,拷贝到一个新建的目 录A中,目录A作为源目录;
(2 )将源代码目录作为B目录,即比对目录;
(3 )使用采用本发明技术方案实现的单向多射文件匹配工具,快速地从B 目录中查找到所有出现这些dll文件的地方,从而帮助开发人员快速地定位问 题的所在并开始修改和调试步骤。
通过本发明可以使问题定位更加高效、准确,提升了开发效率。 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1、一种单向多射文件匹配方法,其特征在于,包括A、采集比对目录中的文件信息分别形成内存匹配对象;B、基于所述内存匹配对象执行文件名匹配;C、对文件名匹配成功的文件进行一致性验证;D、输出一致性验证通过的文件信息。
2、 根据权利要求1所述的方法,其特征在于,步骤A中,形成内存匹配 对象的步骤具体为Al、采集比对目录中的文件信息分别形成文件信息列表文件;A2、从文件信息列表文件中读取文件信息分别在内存中建立内存匹配对象。
3、 根据权利要求2所述的方法,其特征在于,所述文件信息至少包括文 件名及相对和/或绝对路径,所述文件信息列表文件为内存文件或磁盘文件。
4、 根据权利要求1或2所述的方法,其特征在于,步骤A中,采集比对 目录中的文件信息具体为对两个比对目录分别做广度优先的周游,针对每个比对目录下发现的每一 个文件记录文件名、相对路径和/或绝对路径,分别形成所述内存匹配对象。
5、 根据权利要求1所述的方法,其特征在于,所述内存匹配对象为向量 对象、数组对象或列表对象。
6、 根据权利要求1所述的方法,其特征在于,步骤B中,所述比对目录 所对应的内存匹配对象分别为第一匹配对象和第二匹配对象,匹配步骤为循环从第 一 匹配对象中获取每个文件所对应的元素对象,并从所述元素对 象中读取文件名属性值,然后将其与第二匹配对象中的每个元素对象中的文件 名属性值进行比较,如果相等,则将这一对文件的文件名、绝对路径和/或相 对路径写入文件名匹配列表文件中。
7、 根据权利要求1所述的方法,其特征在于,步骤A中,所述文件信息中包含文件大小,步骤c中,首先判断文件名匹配成功的文件的文件大小是否 一致,如果文件大小不一致则内容不一致;否则继续执行内容一致性的验证。
8、 根据权利要求1或7所述的方法,其特征在于,所述一致性验证是指对 文件内容的 一致性验证,所述一致性验证的步骤为计算文件名称匹配成功的文件内容的MD5值,然后判断所述MD5值是否 相同;或,对文件名称匹配成功的文件内容进行二进制的比对,判断二进制内容是否 相同。
9、 根据权利要求1所述的方法,其特征在于,步骤D中,所述输出的一 致性验证通过的文件信息的内容至少包括文件名、相对和/或绝对路径。
全文摘要
本发明公开了一种单向多射文件匹配方法,用于解决现有匹配方法中,匹配效率低、匹配速度慢、缺乏内容一致性的验证的技术问题。本发明在对比对目录及比对目录下的子目录中的所有文件进行匹配时,先从磁盘读取比对目录下的所有文件名称形成内存列表,然后在内存中进行文件名称的匹配,对名称匹配成功的文件再进行内容的一致性验证。本发明能以极小的磁盘读写开销进行大批量文件的匹配,效率极高,而且在提高匹配效率的同时避免了重复磁盘访问从而延长了磁盘的使用寿命。
文档编号G06F17/30GK101551818SQ200910081888
公开日2009年10月7日 申请日期2009年4月14日 优先权日2009年4月14日
发明者斌 吴, 凯 陆 申请人:北京红旗中文贰仟软件技术有限公司