碎片文件扫描的方法及装置的制作方法

文档序号:6371393阅读:180来源:国知局
专利名称:碎片文件扫描的方法及装置的制作方法
技术领域
本发明涉及碎片文件扫描技术领域,特别涉及一种碎片文件扫描的方法及装置。
背景技术
碎片文件是指在磁盘上未连续存储的文件,但碎片文件过多会使设备系统在读文件的时候来回寻找,引起系统读文件的性能下降。现有技术中定期对碎片文件进行扫描,以整理碎片文件,提高系统度文件的性能。具体实现方式为通过调用系统接口遍历磁盘分卷上的文件,然后查询每个文件在磁盘分卷上的存储情况,根据每个文件在磁盘分卷上的存储情况判断文件内容是连续分布在磁盘分卷上的还是分散存放在磁盘分卷上的。若检测到分散存放在磁盘分卷上的文件,则将其保存到指定内存中。在实现本发明的过程中,发明人发现现有技术至少存在以下问题现有技术在进行碎片文件扫描时,将会查询每一个文件在磁盘分卷上的存储情况,而查询每一个文件在 磁盘分卷上的存储情况将回来带来较大的时间开销,降低扫描效率。

发明内容
为了解决现有技术的问题,本发明实施例提供了一种碎片文件扫描的方法及装置。所述技术方案如下—方面,本发明实施例提供了一种碎片文件扫描的方法,所述方法包括获取磁盘上变更的文件,所述变更的文件包括上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件或/和磁盘上新增存储的文件;获取所述变更的文件的存储位置信息;根据所述存储位置信息确定所述变更的文件是否为碎片文件;当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息,所述文件碎片信息至少包括文件碎片的名称及存储位置信息。所述获取磁盘上变更的文件,包括根据存储的缓存信息表获取磁盘上变更的文件,所述缓存信息表记录有上次扫描结束时,磁盘上已存储文件的文件名、最后写入时间戳及扫描结果;或者通过变更监控接口获取磁盘上变更的文件;或者通过应用程序编程接口 API钩子HooK技术获取磁盘上变更的文件。所述根据存储的缓存信息表获取磁盘上变更的文件,包括对磁盘进行扫描,确定当前扫描到的文件是否存在于所述缓存信息表内;如果所述当前扫描到的文件不存在与所述缓存信息表内,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上新增存储的文件;如果所述当前扫描到的文件存在于所述缓存信息表内,则确定所述当前扫描到的文件的最后写入时间戳是否大于所述缓存信息表内存储的所述当前扫描到的文件的最后写入时间戳;
如果确定结果是大于,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件。所述通过变更监控接ロ获取磁盘上变更的文件,包括上次扫描结束吋,启动变更监控接ロ;通过所述变更监控接ロ监控磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中;本次扫描开始时,从缓存中读取磁盘上变更的文件。所述通过应用程序编程接ロ API钩子HooK技术获取磁盘上变更的文件,包括
通过预先注入的检测代码检测上次扫描结束后磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中;本次扫描开始时,从缓存中读取磁盘上变更的文件。另ー方面,本发明实施例提供了一种碎片文件扫描的装置,所述装置包括第一获取模块、第二获取模块、碎片分析模块及扫描输出模块;所述第一获取模块,用于获取磁盘上变更的文件,所述变更的文件包括上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件或/和磁盘上新增存储的文件;所述第二获取模块,用于获取所述变更的文件的存储位置信息;所述碎片分析模块,用于根据所述存储位置信息确定所述变更的文件是否为碎片文件;所述扫描输出模块,用于当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息,所述文件碎片信息至少包括文件碎片的名称及存储位置信息。 所述第一获取模块包括第一获取单元,用于根据存储的缓存信息表获取磁盘上变更的文件,所述缓存信息表记录有上次扫描结束时,磁盘上已存储文件的文件名、最后写入时间戳及扫描结果;或者第二获取单元,用于通过变更监控接ロ获取磁盘上变更的文件;或者第三获取单元,用于通过应用程序编程接ロ API钩子HooK技术获取磁盘上变更的文件。所述第一获取单元包括第一确定子単元,用于对磁盘进行扫描,确定当前扫描到的文件是否存在于所述缓存信息表内;第一判定子単元,用于如果所述当前扫描到的文件不存在与所述缓存信息表内,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上新增存储的文件;第二确定子単元,用于如果所述当前扫描到的文件存在于所述缓存信息表内,则确定所述当前扫描到的文件的最后写入时间戳是否大于所述缓存信息表内存储的所述当前扫描到的文件的最后写入时间戳;第二判定子単元,用于如果确定结果是大于,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件。
所述第二获取单元包括控制子单元,用于上次扫描结束时,启动变更监控接口 ;监控子单元,用于通过所述变更监控接口监控磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中;读取子单元,用于本次扫描开始时,从缓存中读取磁盘上变更的文件。所述第三获取单元包括监控子单元,用于通过预先注入的检测代码检测上次扫描结束后磁盘上变更的文 件,并将监控到的磁盘上变更的文件记录到缓存中;读取子单元,用于本次扫描开始时,从缓存中读取磁盘上变更的文件。本发明实施例提供的技术方案带来的有益效果是在进行碎片文件扫描时,通过缓存信息表筛选出磁盘上变更的文件,之后,获取所述变更的文件的存储位置信息,并根据所述存储位置信息确定所述变更的文件是否为碎片文件,不需要获取磁盘上的每个文件的存储位置信息,降低了因获取文件的存储位置信息的时间开销,从而提高扫描速度。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I是本发明实施例一提供的一种碎片文件扫描的方法流程示意图;图2,为本发明实施例二所提供的一种文件存储的示例图;图3是本发明实施例二提供的一种碎片文件扫描的方法流程示意图;图4是本发明实施例二提供的一种碎片文件扫描的方法流程示意图;图5是本发明实施例三提供的一种碎片文件扫描的装置结构示意图;图6是本发明实施例三提供的一种碎片文件扫描的装置结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例一参见图1,一种碎片文件扫描的方法,所述方法包括步骤101 :获取磁盘上变更的文件,所述变更的文件包括上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件或/和磁盘上新增存储的文件;步骤102 :获取所述变更的文件的存储位置信息;步骤103 :根据所述存储位置信息确定所述变更的文件是否为碎片文件;步骤104 :当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息,所述文件碎片信息至少包括文件碎片的名称及存储位置信息。本发明实施例提供的技术方案带来的有益效果是在进行碎片文件扫描时,通过缓存信息表筛选出磁盘上变更的文件,之后,获取所述变更的文件的存储位置信息,并根据所述存储位置信息确定所述变更的文件是否为碎片文件,不需要获取磁盘上的每个文件的存储位置信息,降低了因获取文件的存储位置信息的时间开销,从而提高扫描速度。实施例ニ通常情况下,将磁盘划分为若干个分卷来进行管理,如通常所说的C盘就是ー个磁盘分卷,这样,用户便可以在不同的磁盘分卷上分别进行文件存储管理。
簇是文件存储管理的最小単位,这里,可以将磁盘分卷划分为若干个物理簇,井将划分磁盘分卷得到的若干个物理簇按顺序编号,该编号可以称为LCN(Logical ClusterNumber,物理簇号),这样,划分磁盘分卷得到的物理簇便可以由LCN来标识。这里,还可以将文件划分为若干个簇进行管理,并将划分文件得到的若干个文件簇按顺序进行编号,该编号称为VCN(Virtual Cluster Number,虚拟簇号),这样,划分文件得到的文件簇便可以由VCN来标识。那么,在进行文件存储管理时,便可以将文件按划分得到的文件簇保存在连续或者离散的若干个物理簇中,且由VCN来辨别划分文件得到的文件簇的排列顺序和连续性。本发明实施例将没有存储在连续物理簇的文件称之为碎片文件,而文件内不连续存储的文件簇称为文件碎片。參见图2,为本发明实施例所提供的一种文件存储的示例图,图中的每一格代表磁盘分卷上的ー个物理簇,其中,带有字母部分的物理簇表示被文件簇占用,且同字母的物理簇表示被属于同一文件的文件簇占用。由图2可以知道,文件C在该磁盘分卷上存储在连续的物理簇内,故该文件C不存在碎片,而文件A和B存储在该磁盘分卷上离散的若干个物理簇内,故,文件A和B为碎片文件。本发明实施例中,需要定期对磁盘进行扫描,获取磁盘上所存储的碎片文件信息,以对碎片文件进行整理,提高磁盘的读写速度。本发明实施例中,从上次扫描结束至本次扫描开始期间,磁盘上已存储的内容未有变更的文件在磁盘上的存储位置与上次扫描时相比并不会发生变化,故本次扫描时,该类内容未有变更的文件就可以不必再进行扫描,可以由缓存的上次的扫描结果来获知该类内容未有变更的文件是否为碎片文件。而从上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件在磁盘上的存储位置与上次扫描时相比会发生变化,可能会是碎片文件,另外,从上次扫描结束至本次扫描开始期间磁盘上新增的文件,由于上次未作扫描,也可能是碎片文件,故本次进行碎片文件扫描时,可以仅对自上次进行碎片文件扫描后磁盘上已存储的内容有变更的文件及磁盘上新增文件进行扫描,可以很大程度上提高碎片文件的扫描速度。基于此,本技术方案在具体实现时可以是在进行碎片文件扫描时,获取磁盘上变更的文件,所述变更的文件包括上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件或/和磁盘上新增存储的文件,之后,获取所述变更的文件的存储位置信息,井根据所获取的存储位置信息来确定变更的文件是否为碎片文件,当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息。本发明实施例可以通过缓存机制来获取磁盘上变更的文件,作为ー个可选实现的实施例,本实施例可以根据存储的缓存信息表来快速的获取磁盘上变更的文件。具体地,建立缓存信息表,该缓存信息表记录了上次进行碎片文件扫描结束时,磁盘上所存储文件的文件名、最后写入时间戳及扫描结果,之后,在每次进行碎片文件扫描结束时,根据当前扫描到的文件的最后写入时间来更新所述缓存信息表。这样,在当前进行碎片文件扫描时,便可以根据该缓存信息表获知磁盘上变更的文件。具体地,对磁盘进行扫描,确定当前扫描到的文件是否存在于所述缓存信息表内;如果所述当前扫描到的文件不存在与所述缓存信息表内,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上新增存储的文件;如果所述当前扫描到的文件存在于所述缓存信息表内,则确定所述当前扫描到的文件的最后写入时间戳是否大于所述缓存信息表内存储的所述当前扫描到的文件的最后写入时间戳;如果确定结果是大于,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件。 假设,上次进行碎片文件扫描时得到的文件I的最后写入时间戳的值为LaStWriteTimePrevi()US,当前进行碎片文件扫描时得到的文件I最后写入时间为LastWriteTimeeiment,那么,当条件 LastWriteTimeprevi(MS〈LastW;riteTimeeu ent 成立时,则认为文件I的内容有变更,而这意味着文件I在磁盘分卷上的存储情况发生了变化,文件I有产生文件碎片的可能。记录下内容有变更的文件1,并将缓存信息表中的文件I的最后时间时间戳由LastWriteTimepreviras更新为LastWriteTimeeurrent,以待下一次筛选使用。之后,会对文件I进行分析一确定文件I是否是碎片文件。例如,上次进行碎片文件扫描时得到的文件I的最后写入时间戳的值为2012-6-5,而当前进行碎片文件扫描时得到的文件I最后写入时间为2012-6-12,则当前扫描到的文件I对比与上一次扫描时,内容有所变更,文件I在磁盘分卷上的存储情况极有可能发生变化。下面,结合具体实例来详细说明基于上述缓存信息表而实现的一种碎片文件扫描的方法,参见图3,所述方法具体可以包括如下操作步骤201 :对磁盘进行扫描,具体地,通过调用第一系统接口获取磁盘所存储文件的基本信息,其中,文件的基本信息可以包括文件名、文件的文件簇信息(如文件簇对应的VCN /[目息)及文件的最后与入时间等;其中,第一系统接口具体可以包括但不限于系统接口 GetFileAttributesEx、GetFiIeInformationByHandle>GetFileTime 及 NtQueryInformationFile0步骤202 :确定当前扫描到的文件是否存在于缓存信息表内,具体地,查询缓存信息表,确定缓存信息表内是否记录有当前扫描到的文件的文件名,当缓存信息表内未记录当前扫描的文件的文件名,则当前扫描到的文件未存在于缓存信息表内,否则,当前扫描到的文件存在于缓存信息表内;如果当前扫描到的文件未存在于缓存信息表内,则判定当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上新增存储的文件,需要分析当前扫描到的文件是否是碎片文件,执行步骤203;如果当前扫描到的文件存在于缓存信息表内,执行步骤206 ;步骤203 :通过调用第二系统接口来获取当前扫描到的文件在磁盘分卷上的存储位置信息,所述存储位置信息可以包括文件的文件簇与存储文件簇的物理簇的LCN间对应关系;
具体实现时,可以调用系统接ロ DeviceIoControl,并传入第一控制码FSCTL_GET_RETRIEVAL_POINTERS来获取当前扫描到的文件的存储位置信息;这里,对于NTFS (New Technology File System)的文件系统,还可以调用DeviceIoControl接ロ,并传入第二控制码FSCTL_GET_NTFS_FILE_RECORD来获取当前扫描到的文件对应的记录信息,然后通过解析这个记录信息来获取当前扫描到的文件的存储位置信息;其中,NTFS具体可以是指Windows NT操作环境和Windows NT高级服务器网络操作系统环境的文件系统。步骤204 :根据文件的存储位置信息来确定当前扫描到的文件是否是碎片文件;具体地,当步骤203获取的存储文件簇的物理簇的LCN连续吋,则判定当前扫描到的文件不存在碎片,不为碎片文件;当步骤203获取的存储文件簇的物理簇的LCN不连续 吋,则判定当前扫描到的文件存在碎片,为碎片文件;步骤205 :将当前扫描到的文件的文件名、最后写入时间及扫描结果(是否是碎片文件)添加到缓存信息表,以便下次进行磁盘扫描时,可以根据该更新后的缓存信息表来获取磁盘上变更的文件,之后,执行步骤210 ;步骤206 :确定当前扫描到的文件的最后写入时间是否大于缓存信息表所记录的所述文件对应的最后写入时间,如果确定结果是不大于,则说明当前扫描到的文件为上次扫描后,磁盘上已存储的内容未有变更的文件,可以根据缓存信息表所记录的所述文件的扫描结果确定所述文件是否是碎片文件,之后,执行步骤210 ;如果确定结果是大于,则判定当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件,执行步骤207 ;步骤207 :通过调用第二系统接ロ来获取当前扫描到的文件在磁盘分卷上的存储位置信息,所述存储位置信息可以包括文件的文件簇与存储文件簇的物理簇的LCN间对应关系;有关步骤207的详细描述请參见步骤203的描述,此处就不再赘述。步骤208 :根据文件的存储位置信息来确定当前扫描到的文件是否是碎片文件;具体地,当步骤207获取的存储文件簇的物理簇的LCN连续吋,则判定当前扫描到的文件不存在碎片,不为碎片文件;当步骤207获取的存储文件簇的物理簇的LCN不连续吋,则判定当前扫描到的文件存在碎片,为碎片文件;步骤209 :根据当前扫描到的文件的文件名、最后写入时间及扫描结果(是否是碎片文件)更新缓存信息表内所述文件的记录;步骤210 :遍历磁盘是否结束,如果结束,结束本次扫描,并输出扫描得到的碎片文件的文件碎片信息,所述文件碎片信息至少包括文件碎片的名称及存储位置信息。如果未结束,返回执行步骤201。进ー步地,本发明实施例在结束本次扫描后,可以对扫描得到的碎片文件进行整理,如将扫描得到的碎片文件存储到指定的一段连续的内存中。本发明实施例所帯来的有益效果为在进行碎片文件扫描时,通过缓存信息表筛选出磁盘上变更的文件,之后,获取所述变更的文件的存储位置信息,并根据所述存储位置信息确定所述变更的文件是否为碎片文件,不需要获取磁盘上的每个文件的存储位置信息,降低了因获取文件的存储位置信息的时间开销,从而提高扫描速度。作为另一可选实现的实施例,本实施例可以通过变更监控接口获取磁盘上变更的文件。具体地,上次扫描结束时,启动变更监控接口 ;通过变更监控接口监控磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中;本次扫描开始时,从缓存中读取磁盘上变更的文件。这里,变更监控接口具体可以包括但不限于ReadDirectoryChanges接口。下面,结合具体实例来详细说明基于上述变更监控接口而实现的一种碎片文件扫描的方法,参见图4,所述方法具体可以包括如下操作步骤301 :对磁盘进行扫描之前,检测缓存内是否记录有变更的文件,如果缓存内未记录有变更的文件,判断本次是第一次进行磁盘扫描,则通过调用第一系统接口获取磁盘所存储文件的基本信息,并通过调用第二系统接口来获取磁盘所存 储文件的存储位置信息,之后,根据文件的存储位置信息来确定文件是否是碎片文件,且扫描结束后输出碎片文件的文件碎片信息,并启动变更监控接口,如ReadDirectoryChanges对磁盘上变更的文件进行监控;如果缓存内记录有变更的文件,执行步骤302 ;其中,第一系统接口具体可以包括但不限于系统接口 GetFileAttributesEx、GetFiIeInformationByHandle> GetFileTime 及 NtQueryInformationFile,第二系统接 P具体包括但不限于DeviceIoControl。其中,通过调用第二系统接口来获取磁盘所存储文件的存储位置信息可以包括调用系统接口DeviceIoControl,并传入第一控制码 FSCTL_GET_RETRIEVAL_POINTERS去获取文件的存储位置信息;这里,对于NTFS (New Technology File System)的文件系统,还可以调用DeviceIoControl接口,并传入第二控制码FSCTL_GET_NTFS_FILE_RECORD获取文件对应的记录信息,然后通过解析这个记录信息来获取文件的存储位置信息;其中,NTFS具体可以是指Windows NT操作环境和Windows NT高级服务器网络操作系统环境的文件系统。步骤302 :从缓存中读取磁盘上变更的文件,并同时关闭变更监控接口,如ReadDirectoryChanges,停止对磁盘上变更文件的监控;步骤303 :依次获取变更的文件的存储位置信息,具体地,可以通过调用第二系统接口来获取变更的文件的存储位置信息,所述存储位置信息可以包括文件的文件簇与存储文件簇的物理簇的LCN间对应关系;具体实现时,可以调用系统接口 DeviceIoControl,并传入第一控制码FSCTL_GET_RETRIEVAL_POINTERS去获取变更的文件的存储位置信息;这里,对于NTFS (New Technology File System)的文件系统,还可以调用DeviceIoControl接口,并传入第二控制码FSCTL_GET_NTFS_FILE_RECORD获取变更的文件对应的记录信息,然后通过解析这个记录信息来获取变更的文件的存储位置信息;其中,NTFS具体可以是指WindowsNT操作环境和Windows NT高级服务器网络操作系统环境的文件系统。
步骤304 :根据变更的文件的存储位置信息确定所述变更的文件是否为碎片文件;具体地,当步骤303获取的存储文件簇的物理簇的LCN连续吋,则判定当前扫描到的文件不存在碎片,不为碎片文件;当步骤303获取的存储文件簇的物理簇的LCN不连续吋,则判定当前扫描到的文件存在碎片,为碎片文件;步骤305 :当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息,所述文件碎片信息至少包括文件碎片的名称及存储位置信息;步骤306 :清空缓存,重新启动变更缄ロ接ロ,如ReadDirectoryChanges,监控磁盘上变更的文件;本发明实施例中,文件的存储位置信息可以包括文件的文件簇与存储文件簇的物理簇的LCN间对应关系,则本实施例中根据文件的存储位置信息来确定文件是否是碎片文件为当存储文件簇的物理簇的LCN连续时,则判定文件不存在碎片,不为碎片文件;当 存储文件簇的物理簇的LCN不连续吋,则判定文件存在碎片,为碎片文件。作为再一可选实现的实施例,本实施例可以通过应用程序编程接ロ API钩子HooK技术获取磁盘上变更的文件。具体地,通过预先注入的检测代码检测上次扫描结束后磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中;本次扫描开始时,从缓存中读取磁盘上变更的文件,之后,获取所述变更的文件的存储位置信息,并根据所述存储位置信息确定所述变更的文件是否为碎片文件。当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息。而基于API HooK技术实现碎片文件扫描的具体实现方式与基于变更监控接ロ实现的碎片文件扫描的方法类似,此处就不再赘述。本发明实施例所帯来的有益效果为在进行碎片文件扫描时,通过缓存信息表筛选出磁盘上变更的文件,之后,获取所述变更的文件的存储位置信息,并根据所述存储位置信息确定所述变更的文件是否为碎片文件,不需要获取磁盘上的每个文件的存储位置信息,降低了因获取文件的存储位置信息的时间开销,从而提高扫描速度。另外,在扫描开始时,跳过磁盘遍历过程,可以直接从缓存中获取磁盘上变更的文件,进ー步地节省了碎片文件扫描的时间,提高扫描效率。实施例三參见图5,一种碎片文件扫描的装置,所述装置包括第一获取模块401、第二获取模块402、碎片分析模块403及扫描输出模块404 ;第一获取模块401,用于获取磁盘上变更的文件,所述变更的文件包括上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件或/和磁盘上新增存储的文件;第二获取模块402,用于获取所述变更的文件的存储位置信息;碎片分析模块403,用于根据所述存储位置信息确定所述变更的文件是否为碎片文件;扫描输出模块404,用于当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息。进ー步地,參见图6,本发明实施例如图5所示的第一获取模块401包括第一获取单元4011,用于根据存储的缓存信息表获取磁盘上变更的文件,所述缓存信息表记录有上次扫描结束时,磁盘上已存储文件的文件名、最后写入时间戳及扫描结果;或者第二获取单元4012,用于通过变更监控接ロ获取磁盘上变更的文件;或者第三获取单元4013,用于通过应用程序 编程接ロ API钩子HooK技术获取磁盘上变更的文件。具体地,第一获取单元4011包括第一确定子単元,用于对磁盘进行扫描,确定当前扫描到的文件是否存在于所述缓存信息表内;第一判定子単元,用于如果所述当前扫描到的文件不存在与所述缓存信息表内,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上新增存储的文件;第二确定子単元,用于如果所述当前扫描到的文件存在于所述缓存信息表内,则确定所述当前扫描到的文件的最后写入时间戳是否大于所述缓存信息表内存储的所述当前扫描到的文件的最后写入时间戳;第二判定子単元,用于如果确定结果是大于,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件。第二获取单元4012包括控制子単元,用于上次扫描结束吋,启动变更监控接ロ ;监控子単元,用于通过变更监控接ロ监控磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中;读取子単元,用于本次扫描开始时,从缓存中读取磁盘上变更的文件。第三获取单元4013包括监控子単元,用于通过预先注入的检测代码检测上次扫描结束后磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中;读取子単元,用于本次扫描开始时,从缓存中读取磁盘上变更的文件。本发明实施例所帯来的有益效果为在进行碎片文件扫描时,通过缓存信息表筛选出磁盘上变更的文件,之后,获取所述变更的文件的存储位置信息,并根据所述存储位置信息确定所述变更的文件是否为碎片文件,不需要获取磁盘上的每个文件的存储位置信息,降低了因获取文件的存储位置信息的时间开销,从而提高扫描速度。需要说明的是上述实施例提供的碎片文件扫描的装置在进行碎片文件扫描吋,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的碎片文件扫描的装置与碎片文件扫描的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于ー种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明 的保护范围之内。
权利要求
1.一种碎片文件扫描的方法,其特征在于,所述方法包括 获取磁盘上变更的文件,所述变更的文件包括上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件或/和磁盘上新增存储的文件; 获取所述变更的文件的存储位置信息; 根据所述存储位置信息确定所述变更的文件是否为碎片文件; 当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息,所述文件碎片信息至少包括文件碎片的名称及存储位置信息。
2.根据权利要求I所述的方法,其特征在于,所述获取磁盘上变更的文件,包括 根据存储的缓存信息表获取磁盘上变更的文件,所述缓存信息表记录有上次扫描结束时,磁盘上已存储文件的文件名、最后写入时间戳及扫描结果;或者 通过变更监控接口获取磁盘上变更的文件;或者 通过应用程序编程接口 API钩子HooK技术获取磁盘上变更的文件。
3.根据权利要求2所述的方法,其特征在于,所述根据存储的缓存信息表获取磁盘上变更的文件,包括 对磁盘进行扫描,确定当前扫描到的文件是否存在于所述缓存信息表内; 如果所述当前扫描到的文件不存在与所述缓存信息表内,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上新增存储的文件; 如果所述当前扫描到的文件存在于所述缓存信息表内,则确定所述当前扫描到的文件的最后写入时间戳是否大于所述缓存信息表内存储的所述当前扫描到的文件的最后写入时间戳; 如果确定结果是大于,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件。
4.根据权利要求2所述的方法,其特征在于,所述通过变更监控接口获取磁盘上变更的文件,包括 上次扫描结束时,启动变更监控接口 ; 通过所述变更监控接口监控磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中; 本次扫描开始时,从缓存中读取磁盘上变更的文件。
5.根据权利要求2所述的方法,其特征在于,所述通过应用程序编程接口API钩子HooK技术获取磁盘上变更的文件,包括 通过预先注入的检测代码检测上次扫描结束后磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中; 本次扫描开始时,从缓存中读取磁盘上变更的文件。
6.一种碎片文件扫描的装置,其特征在于,所述装置包括第一获取模块、第二获取模块、碎片分析模块及扫描输出模块; 所述第一获取模块,用于获取磁盘上变更的文件,所述变更的文件包括上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件或/和磁盘上新增存储的文件;所述第二获取模块,用于获取所述变更的文件的存储位置信息; 所述碎片分析模块,用于根据所述存储位置信息确定所述变更的文件是否为碎片文件; 所述扫描输出模块,用于当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息,所述文件碎片信息至少包括文件碎片的名称及存储位置信息。
7.根据权利要求6所述的装置,其特征在于,所述第一获取模块包括 第一获取单元,用于根据存储的缓存信息表获取磁盘上变更的文件,所述缓存信息表记录有上次扫描结束时,磁盘上已存储文件的文件名、最后写入时间戳及扫描结果;或者第二获取单元,用于通过变更监控接口获取磁盘上变更的文件;或者第三获取单元,用于通过应用程序编程接口 API钩子HooK技术获取磁盘上变更的文件。
8.根据权利要求7所述的装置,其特征在于,所述第一获取单元包括 第一确定子单元,用于对磁盘进行扫描,确定当前扫描到的文件是否存在于所述缓存信息表内;第一判定子单元,用于如果所述当前扫描到的文件不存在与所述缓存信息表内,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上新增存储的文件;第二确定子单元,用于如果所述当前扫描到的文件存在于所述缓存信息表内,则确定所述当前扫描到的文件的最后写入时间戳是否大于所述缓存信息表内存储的所述当前扫描到的文件的最后写入时间戳; 第二判定子单元,用于如果确定结果是大于,则判定所述当前扫描到的文件为上次扫描结束至本次扫描开始期间,磁盘上已存储的内容有变更的文件。
9.根据权利要求7所述的装置,其特征在于,所述第二获取单元包括 控制子单元,用于上次扫描结束时,启动变更监控接口 ; 监控子单元,用于通过所述变更监控接口监控磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中; 读取子单元,用于本次扫描开始时,从缓存中读取磁盘上变更的文件。
10.根据权利要求7所述的装置,其特征在于,所述第三获取单元包括 监控子单元,用于通过预先注入的检测代码检测上次扫描结束后磁盘上变更的文件,并将监控到的磁盘上变更的文件记录到缓存中; 读取子单元,用于本次扫描开始时,从缓存中读取磁盘上变更的文件。
全文摘要
本发明公开了一种碎片文件扫描的方法及装置,属于碎片文件扫描技术领域。所述方法包括获取磁盘上变更的文件,获取所述变更的文件的存储位置信息;根据所述存储位置信息确定所述变更的文件是否为碎片文件;当所述变更的文件为碎片文件时,输出所述碎片文件的文件碎片信息。不需要获取磁盘上的每个文件的存储位置信息,降低了因获取文件的存储位置信息的时间开销,从而提高扫描速度。
文档编号G06F17/30GK102760168SQ201210194369
公开日2012年10月31日 申请日期2012年6月13日 优先权日2012年6月13日
发明者林道正, 毕廷礼 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1