一种在mac下创建树的方法及系统的制作方法

文档序号:6443241阅读:196来源:国知局

专利名称::一种在mac下创建树的方法及系统的制作方法
技术领域
:本发明涉及文件恢复领域,尤其涉及一种在MAC下创建树的方法及系统。
背景技术
:在文件恢复领域,计算机需要扫描磁盘的内容,找到一个文件信息后,生成一个完整的全路径(比如G:\Tool\test.exe),在MAC中,文件路径则不包括盘符。对于一个根据全路径建目录结构的通用方法,从根目录开始进行匹配,向下进行查找,如果不存在,则建其目录结点,如果存在则建立文件节点。如果当文件数量很大时,特别是同一个目录下有很多文件时,此种方法的效率往往很低。在同一个目录下假如有N个文件,每次传递一个路径,将路径分成文件目录结点后,从路径的左边开始,对文件目录树进行查找,如果存在,查找下一个文件目录,不存在,则建立文件目录。那么完成本目录下的文件建树则需要N次对其前级文件目录进行查找,建树效率很低。
发明内容本发明要解决的技术问题在于针对现有技术中在MAC下恢复文件时,创建树的效率低下的缺陷,提供一种在MAC下可提高创建树的效率的方法及系统。本发明解决其技术问题所采用的技术方案是提供给一种在MAC下创建树的方法,包括以下步骤接收底层传来的丢失文件的文件句柄,根据所述文件句柄通过底层接口获取该文件句柄的父句柄和该文件的全路径;在预设的key-value数据结构中进行查找以判断该文件句柄的父句柄是否已保存在所述key-value数据结构中,所述key-value数据结构中存储有文件句柄的父句柄和所述文件句柄的父句柄对应的文件夹节点;若该文件句柄的父句柄在所述key-value数据结构中,则直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点的文件节点数组中;若该文件句柄的父句柄不在所述key-value数据结构中,则根据该文件的全路径创建文件节点,并将所述文件句柄的父句柄和新创建的所述文件节点的上一级文件夹节点放入所述key-value数据结构中。本发明所述的在MAC下创建树的方法中,所述根据该文件的全路径创建文件节点的步骤包括将该文件的全路径从第一个分隔符开始拆分为两个路径,判断分隔符左边的路径是否被创建;若未被创建,则创建该路径为文件夹节点,并判断另一路径是否为文件节点,若不为文件节点,则继续拆分路径,直到拆分后的路径为文件节点;在拆分过程中依次创建文件夹节点下的多级文件夹节点以及最后的文件节点,并将创建的文件夹节点放入其上一级文件夹节点的文件夹节点数组中;若被创建的是最后的文件节点,则将该文件节点放入其上一级文件夹节点的文件节点数组中。本发明所述的在MAC下创建树的方法中,所创建的文件夹节点的信息包括文件夹节点名、下一级文件夹节点数组和下一级文件节点数组;所创建的文件节点的信息包括上一级文件夹节点名、创建文件时间、修改文件时间和文件句柄。本发明所述的在MAC下创建树的方法中,所述文件句柄和文件句柄的父句柄均是文件的唯一标识。本发明所述的在MAC下创建树的方法中,文件夹节点下的所有子节点均按顺序放置在数组中,通过二分法可查找到相应的子节点。本发明解决其技术问题所采用的另一技术方案是提供一种在MAC下创建树的系统,包括丢失文件信息获取模块、key-value数据结构模块和判断模块和创建模块,其中,所述丢失文件信息获取模块,用于接收底层传来的丢失文件的文件句柄,根据所述文件句柄通过底层接口获取该文件句柄的父句柄和该文件的全路径;所述key-value数据结构模块,用于存储文件句柄的父句柄和所述文件句柄的父句柄对应的文件夹节点;所述判断模块,用于在所述key-value数据结构模块中进行查找以判断该文件句柄的父句柄是否已保存在key-value数据结构模块中;创建模块,用于当所述文件句柄的父句柄在所述key-value数据结构模块中时,直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点数组中;当所述文件句柄的父句柄不在所述key-value数据结构模块中时,则根据该文件的全路径创建文件节点,并将所述文件句柄的父句柄和新创建的所述文件节点的上一级文件夹节点放入所述key-value数据结构中。本发明所述的MAC下创建树的系统中,当文件句柄的父句柄不在所述key-value数据结构中时,所述创建模块具体用于将该文件的全路径从第一个分隔符开始拆分为两个路径,判断分隔符左边的路径是否被创建;若未被创建,则创建该路径为文件夹节点,并判断另一路径是否为文件节点,若不为文件节点,则继续拆分路径,直到拆分后的路径为文件节点;在拆分过程中依次创建文件夹节点下的多级文件夹节点以及最后的文件节点,并将创建的文件夹节点放入其上一级文件夹节点的文件夹节点数组中;若被创建的是最后的文件节点,则将文件节点放入其上一级文件夹节点的文件节点数组中。本发明所述的MAC下创建树的系统中,所述创建模块创建的文件夹节点的信息包括文件夹节点名、下一级文件夹节点数组和下一级文件节点数组;所创建的文件节点的信息包括上一级文件夹节点名、创建文件时间、修改文件时间和文件句柄。本发明所述的MAC下创建树的系统中,所述文件句柄和文件句柄的父句柄均是文件的唯一标识。本发明所述的MAC下创建树的系统中,所述创建模块创建的文件夹节点下的所有子节点均按顺序放置在数组中,通过二分法可查找到相应的子节点。本发明产生的有益效果是本发明通过丢失文件句柄的父句柄不在key-value数据结构中时,根据该文件的全路径创建文件节点,并将文件句柄的父句柄和新创建的文件节点的上一级文件夹节点放入key-value数据结构中。当丢失文件句柄的父句柄在key-value数据结构中时,则直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点的文件节点数组中。若同一文件夹下有多个文件,则当该同一文件夹的文件夹节点和句柄已存储于key-value数据结构中时,可以直接创建多个文件的文件节点,可大大提高创建树的效率。下面将结合附图及实施例对本发明作进一步说明,附图中图1是本发明实施例在MAC下创建树的方法流程图;图2是本发明实施例在MAC下创建树的系统结构示意图。具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。在进行文件恢复时,计算机需要扫面磁盘的内容,并将获取的该磁盘中的文件信息发给计算机创建树系统,创建树系统根据获取的信息创建目录结构,即创建树,本发明是基于MAC平台下进行的文件恢复和创建树。在MAC下,一般使用下面两种数据结构来保存数据◎interfaceDRScanInfoTreeNodeNSObject{DRScanInfoTreeNode^parent;//文件夹节点名NSString^nodeName;NSImage*nodeIcon;intisSelected;BOOLisLeaf;NSMutab1eArray^chi1dren;NSMutab1eArray^fileChi1dren;ι//相当于文件夹节点,保存的是文件夹节点的信息interfaceDRScanInfoListNodeNSObject{DRScanInfoTreeNode^parent;//文件夹节点名NSString^nodeName;NSString^nodeSizeString;NSString^createTime;NSString^modifyTime;BOOLisSelected;void^pHandle;}//相当于文件节点,保存的是文件节点的信息如图1所示,本发明实施例在MAC下创建树的方法,主要包括以下步骤SlOl接收底层传来的丢失文件的文件句柄,根据文件句柄通过底层接口获取该文件句柄的父句柄和该文件的全路径;如底层会传出一个pHandle的文件句柄,其代表一个文件的唯一标识。根据该文件句柄可以获取该文件句柄的父句柄以及这个丢失文件的全路径。S102根据该文件的全路径判断该文件句柄的父句柄是否在key-value数据结构中,key-value数据结构中存储有该文件句柄的父句柄(key)和该父句柄对应的文件夹节点(value);该key-value数据结构对应Cocoa(Cocoa是苹果公司为MacOSX所创建的原生面向对象的编程环境)中的“NSMutableDictionary”字典数据结构,value值对应于文件节点的上一级父节点(即文件夹节点),为了达到内存占用与查询速度间的平衡,key-value数据结构中只保存文件节点的上一级父节点,再之上的父节点就不再保存。key值对应于文件句柄(即上文数据结构中的pHandle)的父句柄信息,父句柄类似于pHandle,也是一种唯一标识。S103若该文件句柄的父句柄在key-value数据结构中,则直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点的文件节点数组中;S104若该文件句柄的父句柄不在key-value数据结构中,直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,将该文件的全路径从第一个分隔符开始拆分为两个路径;S105判断分隔符左边的路径是否被创建;S106若分隔符左边的路径未被创建,则创建该路径为文件夹节点,若分隔符左边的路径为根目录,则创建根节点;S107判断另一路径是否为文件节点;S108若另一路径不是文件节点,则继续拆分路径,转入执行S105;当循环进入S106时,即经拆分的分隔符左边的路径未被创建时,则创建该路径为文件夹节点,同时将该文件夹节点放入其上一级文件夹节点的文件夹节点数组中,在创建的节点为根节点时,则不存在上一级文件夹节点;S109若另一路径是文件节点,则创建文件节点,并将创建的文件夹节点放入其上一级文件夹节点的文件节点数组中;SllO将文件句柄的父句柄和新创建的文件节点的上一级文件夹节点放入key-value数据结构中。如获得一丢失文件,文件句柄pHandle,全路径test/a/b.txt,判断该句柄的父句柄是否在key-value数据结构中,若在则直接创建文件节点DRkarHnfVrreeNod钟b,然后将其放到a->fileChildren,即上一级文件夹节点(或者说父文件夹节点)的文件节点数组中,因为一个文件夹中可能包含下一级文件夹或者文件,故文件夹节点包含用于记录下一级文件夹节点信息的文件夹节点数组或者用于记录下一级文件节点信息的文件节点数组。这样当文件夹a中包含很多文件时,则可以根据key-value数据结构和文件的全路径可快速创建多个文件节点,提升了创建效率。若该句柄的父句柄不在key-value数据结构中,则从全路径test/a/b.txt的第一个分隔符“/”开始拆分,得到test和a/b.txt两个路径,然后判断test节点有没有被创建过,如果没有被创建过就创建该节点DRkar^nfoTreeNode^test(文件夹节点,也可称为根节点),然后判断a/b.txt是不是文件节点,如果不是文件节点则拆分路径a/b.txt,从该路径的第一个分隔符继续拆分,得到a和b.txt两个路径,因为没有创建a节点,则创建该节点DRkarnnfoTreeNod^a(文件夹节点),并把该文件夹节点放到test->children中,即放入上一级文件夹节点test的文件夹节点数组中,判断另一路径b.txt是不是文件节点,结果是文件节点,则创建该节点DRkar^nfoLiStNode^3(文件节点),并把该节点放到>fileChildren,即上一级文件夹节点(或者说父文件夹节点)的文件节点数组中。然后通过底层接口获取该文件句柄(pHandle)的父handle,在key-value数据结构中存储父handle和a节点,自此循环结束。当计算机接到其他丢失文件句柄时,都按照上述方法创建树,直到将所有丢失文件恢复。由上文中所介绍的在MAC中的两种存储数据的数据结构可知,所创建的文件夹节点的信息包括文件夹节点名(DRkar^nfoI^reeNode^arent)、下一级文件夹节(NSMutab1eArray*chi1dren)禾口Τ"—双f牛(NSMutab1eArray*fi1eChi1dren)等;所创建的文件节点的信息包括上一级文件夹节点名,即父文件夹节点名(DRScanInfoTreeNode^parent)、创建文件时间(NSString*createTime)、修改文件时间(NSString^modifyTime)和文件句柄(void*pHandle)等。本发明实施例中,文件夹节点下的所有子节点(包括文件夹节点和文件节点)均按顺序放置在数组中(如文件夹节点数组NSMutableArray^children,文件节点数组NSMutableArray*fiIeChildren),通过二分法可查找到相应的子节点。如图2所示,本发明实施例在MAC下创建树的系统,包括丢失文件信息获取模块10、判断模块20、key-value数据结构模块30和创建模块40,其中,丢失文件信息获取模块10,用于接收底层传来的丢失文件的文件句柄,根据文件句柄通过底层接口获取该文件句柄的父句柄和该文件的全路径;key-value数据结构模块30,用于存储文件句柄的父句柄和文件句柄的父句柄对应的文件夹节点;在创建树时,若同一文件夹下有多个文件,则当该同一文件夹的文件夹节点和句柄已存储于key-value数据结构模块30中时,则可以直接创建多个文件的文件节点,提高了创建效率。判断模块20,用于在key-value数据结构模块中进行查找以判断该文件句柄的父句柄是否已保存在key-value数据结构模块中;创建模块40,用于当文件句柄的父句柄在key-value数据结构模块中时,直接根据该该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点数组中;当文件句柄的父句柄不在key-value数据结构模块中时,则根据该文件的全路径创建文件节点,并将文件句柄的父句柄和新创建的文件节点的上一级文件夹节点放入key-value数据结构中。本发明实施例中,当文件句柄的父句柄不在所述key-value数据结构中时,创建模块40具体用于将该文件的全路径从第一个分隔符开始拆分为两个路径,判断分隔符左边的路径是否被创建,若未被创建,则创建该路径为文件夹节点,并判断另一路径是否为文件节点,若不为文件节点,则继续拆分路径,直到拆分后的路径为文件节点;在拆分过程中依次创建文件夹节点下的多级文件夹节点以及最后的文件节点,并将创建的文件夹节点放入上一级文件夹节点的文件夹节点数组中;若被创建的是最后的文件节点,则文件节点放入其上一级文件夹节点的文件节点数组中;本发明实施例中,文件句柄和文件句柄的父句柄均是文件的唯一标识。本发明实施例中,创建模块40所创建的文件夹节点的信息包括文件夹节点名、下一级文件夹节点数组和下一级文件节点数组等;所创建的文件节点的信息包括上一级文件夹节点名、创建文件时间、修改文件时间和文件句柄等。本发明实施例中,创建模块40创建的文件夹节点下的所有子节点(包括文件夹节点和文件节点)均按顺序放置在数组中,通过二分法可查找到相应的子节点。应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。权利要求1.一种在MAC下创建树的方法,其特征在于,包括以下步骤接收底层传来的丢失文件的文件句柄,根据所述文件句柄通过底层接口获取该文件句柄的父句柄和该文件的全路径;在预设的key-value数据结构中进行查找以判断该文件句柄的父句柄是否已保存在所述key-value数据结构中,所述key-value数据结构中存储有文件句柄的父句柄和所述文件句柄的父句柄对应的文件夹节点;若该文件句柄的父句柄在所述key-value数据结构中,则直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点的文件节点数组中;若该文件句柄的父句柄不在所述key-value数据结构中,则根据该文件的全路径创建文件节点,并将所述文件句柄的父句柄和新创建的所述文件节点的上一级文件夹节点放入所述key-value数据结构中。2.根据权利要求1所述的在MAC下创建树的方法,其特征在于,所述根据该文件的全路径创建文件节点的步骤包括将该文件的全路径从第一个分隔符开始拆分为两个路径,判断分隔符左边的路径是否被创建;若未被创建,则创建该路径为文件夹节点,并判断另一路径是否为文件节点,若不为文件节点,则继续拆分路径,直到拆分后的路径为文件节点;在拆分过程中依次创建文件夹节点下的多级文件夹节点以及最后的文件节点,并将创建的文件夹节点放入其上一级文件夹节点的文件夹节点数组中;若被创建的是最后的文件节点,则将该文件节点放入其上一级文件夹节点的文件节点数组中。3.根据权利要求2所述的在MAC下创建树的方法,其特征在于,所创建的文件夹节点的信息包括文件夹节点名、下一级文件夹节点数组和下一级文件节点数组;所创建的文件节点的信息包括上一级文件夹节点名、创建文件时间、修改文件时间和文件句柄。4.根据权利要求1-3任一项所述的在MAC下创建树的方法,其特征在于,所述文件句柄和文件句柄的父句柄均是文件的唯一标识。5.根据权利要求1-3任一项所述的MAC下创建树的方法,其特征在于,文件夹节点下的所有子节点均按顺序放置在数组中,通过二分法可查找到相应的子节点。6.一种在MAC下创建树的系统,其特征在于,包括丢失文件信息获取模块、key-value数据结构模块和判断模块和创建模块,其中,所述丢失文件信息获取模块,用于接收底层传来的丢失文件的文件句柄,根据所述文件句柄通过底层接口获取该文件句柄的父句柄和该文件的全路径;所述key-value数据结构模块,用于存储文件句柄的父句柄和所述文件句柄的父句柄对应的文件夹节点;所述判断模块,用于在所述key-value数据结构模块中进行查找以判断该文件句柄的父句柄是否已保存在key-value数据结构模块中;创建模块,用于当所述文件句柄的父句柄在所述key-value数据结构模块中时,直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点数组中;当所述文件句柄的父句柄不在所述key-value数据结构模块中时,则根据该文件的全路径创建文件节点,并将所述文件句柄的父句柄和新创建的所述文件节点的上一级文件夹节点放入所述key-value数据结构中。7.根据权利要求6所述的MAC下创建树的系统,其特征在于,当文件句柄的父句柄不在所述key-value数据结构中时,所述创建模块具体用于将该文件的全路径从第一个分隔符开始拆分为两个路径,判断分隔符左边的路径是否被创建;若未被创建,则创建该路径为文件夹节点,并判断另一路径是否为文件节点,若不为文件节点,则继续拆分路径,直到拆分后的路径为文件节点;在拆分过程中依次创建文件夹节点下的多级文件夹节点以及最后的文件节点,并将创建的文件夹节点放入其上一级文件夹节点的文件夹节点数组中;若被创建的是最后的文件节点,则将文件节点放入其上一级文件夹节点的文件节点数组中。8.根据权利要求7所述的MAC下创建树的系统,其特征在于,所述创建模块创建的文件夹节点的信息包括文件夹节点名、下一级文件夹节点数组和下一级文件节点数组;所创建的文件节点的信息包括上一级文件夹节点名、创建文件时间、修改文件时间和文件句柄。9.根据权利要求6-8中任一项所述的MAC下创建树的系统,其特征在于,所述文件句柄和文件句柄的父句柄均是文件的唯一标识。10.根据权利要求6-8中任一项所述的MAC下创建树的系统,其特征在于,所述创建模块创建的文件夹节点下的所有子节点均按顺序放置在数组中,通过二分法可查找到相应的子节点。全文摘要本发明公开了一种在MAC下创建树的方法及系统,本发明通过丢失文件句柄的父句柄在key-value数据结构中时,直接根据该文件句柄的父句柄对应的文件夹节点创建文件节点,并将该文件节点放入其上一级文件夹节点的文件节点数组中;若丢失文件句柄的父句柄不在所述key-value数据结构中,则根据该文件的全路径创建文件节点,并将所述文件句柄的父句柄和新创建的所述文件节点的上一级文件夹节点放入所述key-value数据结构中。若同一文件夹下有多个文件,则当该同一文件夹的文件夹节点和句柄已存储于key-value数据结构中时,可以直接创建多个文件的文件节点,可大大提高创建树的效率。文档编号G06F17/30GK102567507SQ201110441179公开日2012年7月11日申请日期2011年12月26日优先权日2011年12月26日发明者周卫巍申请人:深圳市万兴软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1