CN113419759A - 文件升级方法、装置及电子设备 - Google Patents
文件升级方法、装置及电子设备 Download PDFInfo
- Publication number
- CN113419759A CN113419759A CN202110701033.9A CN202110701033A CN113419759A CN 113419759 A CN113419759 A CN 113419759A CN 202110701033 A CN202110701033 A CN 202110701033A CN 113419759 A CN113419759 A CN 113419759A
- Authority
- CN
- China
- Prior art keywords
- upgrading
- file
- target
- upgrade
- macro
- 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
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000015654 memory Effects 0.000 claims description 93
- 238000012545 processing Methods 0.000 claims description 15
- 238000011161 development Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 239000002131 composite material Substances 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及软件开发技术领域,具体涉及文件升级方法、装置及电子设备,所述文件升级方法包括获取待更新目标对应的升级宏,所述升级宏包括升级方式;读取目标文件,以确定所述目标文件的文件属性信息;基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件。通过升级宏的方式为底层开发框架提供升级能力,在不需要额外大量编码的情况下,自动完成文件的升级,提高了文件升级的效率。
Description
技术领域
本发明涉及软件开发技术领域,具体涉及文件升级方法、装置及电子设备。
背景技术
对于大型软件的开发,例如,三维建模软件,随着软件不断地开发和完善,类的数据结构会不断的发生改变,以前保存下来的低版本文件中类的数据结构和当前代码中类的数据结构不一致,无法指导反序列化的进行,导致原来的低版本文件不能被打开。又例如,一些大型软件中的公共数据一般会存到一个数据库中,在打开文件时会根据一些索引信息去数据库中找到实际需要的数据,例如建模软件中的材质库,构件库,贴图等数据被存放到数据库中。低版本文件中的数据依赖于数据库中的数据,而数据库中的相关数据已经更新了,低版本文件中使用的数据依然是未更新前的,会导致低版本文件在打开时因为找不到数据库中对应的数据,而打开失败。
基于此,就需要对低版本文件进行升级,以便可以被打开。现有打开低版本文件的方式,都是通过使用不变的格式。然而,通过使用不变格式的升级方式,只适用于数据结构简单,功能单一的软件。对于大型的三维建模软件数据结构和功能都比较复杂,由于其不可能将所有需要的数据结构一次性设计出来,导致每次升级开发人员的工作量都很大,导致升级效率较低。
发明内容
有鉴于此,本发明实施例提供了一种文件升级方法、装置及电子设备,以解决升级效率低的问题。
根据第一方面,本发明实施例提供了一种文件升级方法,包括:
获取待更新目标对应的升级宏,所述升级宏包括升级方式;
读取目标文件,以确定所述目标文件的文件属性信息;
基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件。
本发明实施例提供的文件升级方法,通过升级宏的方式为底层开发框架提供升级能力,在不需要额外大量编码的情况下,自动完成文件的升级,提高了文件升级的效率。
结合第一方面,在第一方面第一实施方式中,所述基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件,包括:
获取当前版本软件对应的代码属性信息;
利用所述目标文件的文件属性信息确定所述升级目标的文件属性信息;
利用所述升级宏对所述升级目标的文件属性信息进行升级,得到升级结果;
基于所述代码属性信息将所述升级结果处理成可识别对象,以升级所述目标文件。
本发明实施例提供的文件升级方法,分别对当前版本软件与目标文件进行分析,得到对应的代码属性信息以及文件属性信息,由于在属性信息中包括了软件与文件的数据信息,利用升级宏对文件属性信息进行升级,所得到的升级结果与代码属性信息中的数据结构一一对应,因此,利用代码属性信息就可以将升级结果处理成可识别对象,从而实现目标文件的升级。
结合第一方面第一实施方式,在第一方面第二实施方式中,所述利用所述升级宏对所述升级目标的文件属性信息进行升级,得到升级结果,包括:
调用所述升级宏对应的升级例程;
基于所述升级例程对所述升级目标的文件属性信息进行升级,得到所述升级结果。
本发明实施例提供的文件升级方法,通过实现封装适用于所有目标的升级的方法,通过升级宏调用相应的升级例程,就可以完成不同的升级要求,从而在打开目标文件时就可以自动的完成升级。
结合第一方面第二实施方式,在第一方面第三实施方式中,所述基于所述升级目标的升级例程对所述文件属性信息进行升级,得到所述升级结果,包括:
读取所述目标文件的二进制数据;
基于所述升级目标的文件属性信息对所述二进制数据进行反序列化,生成内存模型节点;
利用所述升级例程对所述内存模型节点进行升级,得到升级后的内存模型节点。
本发明实施例提供的文件升级方法,采用二进制数据与可识别对象的中间状态,即,内存模型节点进行升级,由于代码属性信息与文件属性信息中的数据结构不匹配,这两者均难以指导二进制数据的序列化,因此,选用两者的中间状态,可以避免反序列化失败的问题。
结合第一方面第三实施方式,在第一方面第四实施方式中,所述利用所述升级例程对所述内存模型节点进行升级,得到升级后的内存模型节点,包括:
确定所述内存模型节点中的待处理节点;
利用所述升级例程对所述待处理节点进行升级,得到升级后的内存模型节点。
本发明实施例提供的文件升级方法,内存模型节点为树型结构,利用该结构可以简化升级的数据处理,提高了文件升级的效率。
结合第一方面第三实施方式,在第一方面第五实施方式中,所述基于所述代码属性信息将所述升级结果处理成可识别对象,以升级所述目标文件,包括:
利用所述代码属性信息对所述升级后的内存模型节点进行反序列化,得到所述可识别对象;
将所述可识别对象添加到所述目标文件对应的文档中,以升级所述目标文件。
本发明实施例提供的文件升级方法,由于升级后的内存模型节点中的数据结构与代码属性信息中的数据结构一一对应,利用代码属性信息对升级后的内存模型节点进行反序列化,从而能够得到可识别对象,实现了高版本软件打开低版本文件的升级。
结合第一方面,在第一方面第六实施方式中,所述升级宏还包括目标版本号,所述获取所述待更新目标对应的升级宏,包括:
启动当前版本软件,以确定所述当前版本软件的代码属性信息;
加载所述升级宏,并利用所述目标版本号更新所述代码属性信息中对应目标的代码版本号;
将所述升级宏注册到升级管理器中,确定与所述升级宏对应的升级例程。
本发明实施例提供的文件升级方法,在当前版本软件启动时,获取代码属性信息并将升级宏注册到升级管理器中,为后续的文件升级做好准备,可以减少后续文件升级的处理时间,提高了文件升级的效率。
结合第一方面第六实施方式,在第一方面第七实施方式中,所述基于所述升级宏对所述目标文件中对应的目标进行升级,以升级所述目标文件,还包括:
利用所述目标文件的文件属性信息确定所述目标文件中各个目标的文件版本号;
比较所述各个目标的文件版本号与对应的所述代码版本号,确定所述升级目标。
本发明实施例提供的文件升级方法,通过将文件版本号与代码版本号以确定出升级目标,可以准确地确定出升级目标,保证了文件升级的可靠性。
根据第二方面,本发明实施例提供了一种文件升级装置,包括:
获取模块,用于获取待更新目标对应的升级宏,所述升级宏包括升级方式;
读取模块,用于读取目标文件,以确定所述目标文件的文件属性信息;
升级模块,用于基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件。
本发明实施例提供的文件升级装置,通过升级宏的方式为底层开发框架提供升级能力,在不需要额外大量编码的情况下,自动完成文件的升级,提高了文件升级的效率。
根据第三方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的文件升级方法。
根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的文件升级方法。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的文件升级方法的流程图;
图2是根据本发明实施例的类的升级示意图;
图3是根据本发明实施例的文件升级方法的流程图;
图4是根据本发明实施例的内存模型节点的示意图;
图5a-图5c是根据本发明实施例的内存模型节点升级示意图;
图6是根据本发明实施例的打开低版本文件的流程图;
图7是根据本发明实施例的文件升级方法的流程图;
图8是根据本发明实施例的软件启动时底层框架的处理流程图;
图9是根据本发明实施例的文件升级装置的结构框图;
图10是本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
对于目标文件而言,是利用V1版本的软件保存的,即保存的是V1格式的文件。而在软件升级之后,例如,升级到V2版本。在利用V2版本的软件打开V1格式的文件时,可能会出现打开失败的情况。这是由于,V1格式的文件中类的数据结构与V2版本的软件中类的数据结构不一致,或者是,V2版本的软件中类的数据结构已经更新,而V1格式的文件中类的数据结构未更新,导致低版本文件在利用高版本软件打开时因为找不到数据库中对应的数据而打开失败。
基于此,本发明实施例提供了一种文件升级方法,以解决低版本文件打开失败的问题。
需要说明的是,本发明实施例中所述的底层框架,可以理解为文件打开的处理逻辑。在该底层框架中,提供了启动软件的处理逻辑以及在软件中打开文件的处理逻辑。其中,在启动软件的处理逻辑中,主要是完成升级宏的注册以及版本号的更新;在软件中打开文件的处理逻辑中,主要是完成目标文件的升级,以在高版本软件中打开低版本的文件。
根据本发明实施例,提供了一种文件升级方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种文件升级方法,可用于电子设备,如电脑、手机、平板电脑等,图1是根据本发明实施例的文件升级方法的流程图,如图1所示,该流程包括如下步骤:
S11,获取待更新目标对应的升级宏。
其中,所述升级宏包括升级方式。
待更新目标是由开发人员确定的,其对应的升级宏是在有升级需求时在代码中添加的。所述的待更新目标可以是类,也可以是属性,或者自定义属性等等。其中,不同类型的升级对应不同名称的升级宏。不同类型的升级,例如,属性升级、类升级、自定义属性升级等等。
对于属性升级,升级宏的名称为A1;对于类升级,升级宏的名称为A2,;对于自定义属性升级,升级宏的名称为A3。当需要对待更新目标进行升级时,先基于升级类型确定升级宏的名称,再添加相应的内容,以形成完整的升级宏。
例如,如图2所示,类A和类B是独立的两个类,需要在类A中新增两个属性,具体的升级宏可以采用如下方式定义:
ADD_NON_OBJECT_PROPERTY(std::wstring,str)
ADD_OBJECT_PROPERTY(UniIdentity,b,类B的Guid)
具体地,新增宽字符串属性通过宏ADD_NON_OBJECT_PROPERTY(std::wstring,str)声明,新增类类型属性通过宏ADD_OBJECT_PROPERTY(UniIdentity,b,类B的Guid)声明。其中,类B的Guid表示类的唯一标识。
需要说明的是,上述关于升级宏的定义仅仅是一种示例,本发明的保护范围并不限于此,具体可以依据实际情况进行相应的设置。
电子设备在获取到待升级目标的升级宏之后,可以将其存储在预设存储空间内,在后续需要进行升级时,自动利用该升级宏对应的升级方式完成不同的升级要求。
需要说明的是,升级宏是事先写在代码中,当软件启动时,通过获取代码中的升级宏,以完成升级的初始化工作,为后续的升级提供了基础保障。或者,升级宏也可以是电子设备启动软件时,实时从其他地方获取到的,在此对其并不做任何限定。
关于该步骤具体将在下文中进行详细描述。
S12,读取目标文件,以确定目标文件的文件属性信息。
电子设备在启动相应的软件之后,再利用该软件打开目标文件。所述的目标文件可以是存储在电子设备中的;也可以是存储在第三方设备中的,电子设备从第三方设备中访问该目标文件并利用软件进行打开,相应地,电子设备就可以读取到目标文件。
目标文件的文件属性信息用于表征该文件中各个目标,例如,类成员变量、成员方法、类名称、类的标识和类的继承关系等等。
S13,基于升级宏以及目标文件的文件属性信息对目标文件中对应的升级目标进行升级,以升级目标文件。
电子设备在读取到目标文件之后,在打开过程中利用升级宏调用相应的升级方法对目标文件中对应的升级目标进行升级。具体地,对于目标文件而言,其所包括每个目标,即,类、属性、扩展属性等等,均具有唯一的标识。在获取升级宏时,可以包括待升级目标的标识,电子设备利用待升级目标的标识与目标文件的每个目标的标识进行比较,就可以确定出目标文件中的升级目标。
或者,在升级宏中包括有待更新目标的版本号,且在目标文件的每个目标也具有其对应的版本号,将两个版本号进行比对,就可以确定升级目标。
或者,还可以采用其他方式确定目标文件中的升级目标,在此对其并不做任何限定,具体可以依据实际需求进行相应的设置。
电子设备在确定出升级目标之后,利用对应的升级宏对其进行升级。具体地,由于目标文件的文件属性信息表征出了文件中的各个目标的属性及相互之间的依赖关系,因此,利用升级宏对升级目标的文件属性信息进行更新,即可完成对升级目标的升级。当所有升级目标升级完成之后,就可以实现对目标文件的升级,从而可以在软件中打开该目标文件。此处的升级是针对低版本的目标文件而言,即目标文件中目标的版本低于软件中目标的版本。
关于该步骤具体将在下文中进行详细描述。
本实施例提供的文件升级方法,通过升级宏的方式为底层开发框架提供升级能力,在不需要额外大量编码的情况下,自动完成文件的升级,提高了文件升级的效率。
在本实施例中提供了一种文件升级方法,可用于电子设备,如电脑、手机、平板电脑等,图3是根据本发明实施例的文件升级方法的流程图,如图3所示,该流程包括如下步骤:
S21,获取待更新目标对应的升级宏。
其中,所述升级宏包括升级方式。
详细请参见图1所示实施例的S11,在此不再赘述。
S22,读取目标文件,以确定目标文件的文件属性信息。
详细请参见图1所示实施例的S12,在此不再赘述。
S23,基于升级宏以及目标文件的文件属性信息对目标文件中对应的升级目标进行升级,以升级目标文件。
具体地,上述S23可以包括:
S231,获取当前版本软件对应的代码属性信息。
在当前版本软件启动时,底层框架会加载所有类的属性信息到内存,所述的属性信息又称为Schema信息,所述的Schema信息包括类的所有信息,例如,成员变量、成员方法、类名称、类的标识和类的继承关系等等。在利用当前版本软件保存文件时会根据该Schema信息进行序列化,将序列化后的Schema信息称之为代码属性信息,即SchemaOfCode。
此处需要说明的是,所述的Schema信息是当前版本软件在保存该版本的文件时涉及到的所有类的属性信息。
S232,利用目标文件的文件属性信息确定升级目标的文件属性信息。
电子设备在利用当前版本软件打开目标文件的过程中,底层框架会读取目标文件中保存的所有类的Schema信息,文件中的Schema信息称之为文件属性信息,即SchemaOfFile。所述的类的Schema信息包括类的所有信息,例如,成员变量、成员方法、类名称、类的标识和类的继承关系等等。
在此基础上,电子设备可以先确定出目标文件中的升级目标,再从所有类的Schema信息中确定升级目标的文件属性信息。
S233,利用升级宏对升级目标的文件属性信息进行升级,得到升级结果。
电子设备获取到升级目标的文件属性信息之后,再利用升级宏对应的升级方法对该文件属性信息进行升级。所述的升级可以是新增属性、删除属性、属性重命名、重定义属性类型、将属性移动至祖先类、从祖先类移入属性等等。既有新增属性,也有对原属性的更改,分别对应不同类型的升级。如上文所述,不同类型的升级对应不同名称的升级宏。
例如,当需要对升级目标新增属性时,可以利用升级宏确定升级方式,再调用相应的升级方式将新增属性加入到升级目标中,得到升级结果。
在本实施例的一些可选实施方式中,上述S233可以包括:
(1)调用升级宏对应的升级例程。
在软件启动时,电子设备将升级宏注册到升级管理器,所述的升级管理器用于管理各种类型的升级,例如,属性升级、类升级以及自定义属性升级等等。进一步地,在底层升级框架中还通过模板封装了适合所有类升级的方法。
(2)基于升级例程对升级目标的文件属性信息进行升级,得到升级结果。
通过特定的升级宏调用不同的升级例程即可完成不同的升级要求,具体地,在需要升级的时候,只需要使用对应的升级宏将需要升级的属性类型、属性名称或复合属性类型,以及类的标识和升级的版本号写入到升级宏即可。
在升级过程中,自动利用升级宏调用相应的升级例程对文件属性信息进行升级,就可以得到升级结果。即,在低版本文档打开的时候就可以自动的完成升级。
通过实现封装适用于所有目标的升级的方法,通过升级宏调用相应的升级例程,就可以完成不同的升级要求,从而在打开目标文件时就可以自动的完成升级。
在本实施例的一些可选实施方式中,上述S233的步骤(2)可以包括:
2.1)读取目标文件的二进制数据。
电子设备在打开文件时,通过输入流读取目标文件,读到的数据是二进制表示的,即读取到所述的二进制数据。
2.2)基于文件属性信息对二进制数据进行反序列化,生成内存模型节点。
如上文所述,文件属性信息,即SchemaOfFile包含类的所有信息,类似与Java的反射机制,通过SchemaOfFile可以将一个类还原出来。电子设备利用SchemaOfFile指导二进制数据进行反序列化,生成内存模型节点。所述的内存模型节点是针对对象的,是对象的类的实例。
图4示出了内存模型节点的一个示意图,在内存模型节点为树型结构,包括节点MemoryModeGroupNode和节点MemoryModeLeafNode,相应地,表示一个类中的所有对象,以及与其他对象的关联关系。即,将类的数据结构整理成树型结构,即得到所述的内存模型节点。
内存模型节点是一个树型结构,每一个节点代表对象的一个属性,MemoryModeGroupNode代表复合属性,MemoryModeLeafNode代表基本属性。其具体的数据结构可以如下所示:
MemoryModeGroupNode
类的标识
类的版本号
属性类型
拥有该节点的节点
新增标记
删除标记
该节点的属性集合
{MemoryModeGroupNode,…};
MemoryModeLeafNode
类的标识
类的版本号
属性类型
拥有该节点的节点
新增标记
删除标记
该节点的二进制数据;
具体地,上述数据结构中,拥有该节点的节点就是谁包含该节点;新增标记和删除标记就是若该节点是新增的或者被删除了,就进行相应的标记;该节点的属性集合,就是该节点包括哪些属性,如图4所示,根节点MemoryModeGroupNode包括3个MemoryModeGroupNode,这3个MemoryModeGroupNode就是跟节点的属性集合;该节点的二进制数据就是该节点的所有数据,这个数据用二进制表示。
2.3)利用升级例程对内存模型节点进行升级,得到升级后的内存模型节点。
若确定需要内存模型节点中的某个节点进行处理,先定位到相应的节点,再针对该节点进行处理,进而得到升级后的内存模型节点。
其中,图5a-图5c示出了对内存模型节点进行添加属性的处理过程。具体地,内存模型节点中是二进制数据,假设代码中类A添加了一个属性B。如图5a所示,由SchemaOfFile指导反序列化生成类A的对象a的内存模型节点;如图5b所示,由SchemaOfCode指导反序列化生成的属性B的内存模型节点;如图5c所示,对a的内存模型节点进行升级,将属性B的内存模型节点添加到a的内存模型节点下。
采用二进制数据与可识别对象的中间状态,即,内存模型节点进行升级,由于代码属性信息与文件属性信息中的数据结构不匹配,这两者均难以指导二进制数据的序列化,因此,选用两者的中间状态,可以避免反序列化失败的问题。
在本实施例的一些可选实施方式中,上述步骤2.3)可以包括:
a)确定内存模型节点中的待处理节点。
待处理节点的确定是取决于升级宏中的声明,利用升级宏的名称确定出升级方式。
b)利用升级例程对待处理节点进行升级,得到升级后的内存模型节点。
例如,对于新增属性,就可以先定位到根节点,再将新增属性对应的内存模型节点加入到根节点上;对于删除属性,同样地,先定位到待处理节点,再将待处理节点内的数据删除,相应地,记录删除标识。
关于升级例程的具体实现,在此对其并不做任何限定,可以根据实际需求进行设置,只需保证能够实现相应的功能即可。
内存模型节点为树型结构,利用该结构可以简化升级的数据处理,提高了文件升级的效率。
S234,基于代码属性信息将升级结果处理成可识别对象,以升级目标文件。
如上文所述,升级结果仅仅是升级后的内存模型对象,由于其并不是采用二进制数据形式表示的,所以升级结果并不是可识别对象。
此时由于升级后的内存模型节点和当前代码中类的数据结构一一对应,因此,可以使用代码属性信息指导升级后的内存模型节点进行反序列化,生成文档中可识别对象,从而实现高版本软件打开低版本文件的升级。
在本实施例的一些可选实施方式中,上述S234可以包括:
(1)利用代码属性信息对升级后的内存模型节点进行反序列化,得到可识别对象。
在未升级之前,当前代码中的类的数据结构发生改变,目标文件中的数据结构和代码中的数据结构已经不对应,即,SchemaOfFile和SchemaOfCode已经不一样了,SchemaOfFile或SchemaOfCode都不能指导二进制数据直接反序列化成代码中可识别的C++对象。因此,在本实施例中采用一个中间状态,即内存模型节点,先根据SchemaOfFile将二进制数据反序列化成内存模型节点,利用升级例程对内存模型节点进行升级之后,得到升级结果,再根据SchemaOfCode将内存模型节点反序列化成文档可识别的C++对象。
(2)将可识别对象添加到目标文件对应的文档中,以升级目标文件。
当前版本的软件在打开目标文件时,生成目标文件的文档,即代码化表示的文档,电子设备将可识别的C++对象添加到该文件中,实现对目标文件的升级。
由于升级后的内存模型节点中的数据结构与代码属性信息中的数据结构一一对应,利用代码属性信息对升级后的内存模型节点进行反序列化,从而能够得到可识别对象,实现了高版本软件打开低版本文件的升级。
本实施例提供的文件升级方法,分别对当前版本软件与目标文件进行分析,得到对应的代码属性信息以及文件属性信息,由于在属性信息中包括了软件与文件的数据信息,利用升级宏对文件属性信息进行升级,所得到的升级结果与代码属性信息中的数据结构一一对应,因此,利用代码属性信息就可以将升级结果处理成可识别对象,从而实现目标文件的升级。
作为本实施例的一个具体实施方式,如图6所示,所述的文件升级方法包括:
在利用当前版本的软件打开目标文件时,读取文件的所有类Schema信息,得到SchemaOfFile,读取文件的二进制数据;再根据SchemaOfFile反序列化读取到的二进制数据,生成内存模型节点;根据升级管理器中升级例程,对内存模型节点进行升级,得到升级后的内存模型节点;利用SchemaOfCode将升级后的内存模型节点反序列化成C++对象;将C++对象添加到文档环境中,完成目标文件的升级,再进行其他的初始化,文件打开成功。
在本实施例中提供了一种文件升级方法,可用于电子设备,如电脑、手机、平板电脑等,图7是根据本发明实施例的文件升级方法的流程图,如图7所示,该流程包括如下步骤:
S31,获取待更新目标对应的升级宏。
其中,所述升级宏包括升级方式以及目标版本号。
具体地,上述S31可以包括:
S311,启动当前版本软件,以确定当前版本软件的代码属性信息。
在当前版本软件启动时,底层框架会加载当前版本软件对应的代码属性信息,即所述的SchemaOfCode。
S312,加载升级宏,并利用目标版本号更新代码属性信息中对应目标的代码版本号。
升级宏是事先在代码中添加的,在启动当前版本软件时,加载该升级宏,根据升级宏中的目标版本号更新SchemaOfCode中的版本号。其中,SchemaOfCode中的版本号默认是从1开始的,当有升级时,对应SchemaOfCode中的版本号会更新到2,再有升级就一次进行累加,保证当前版本软件启动完成后,内存中SchemaOfCode信息是最新的。
例如,一个升级程序如下所示,类A和类B是独立的两个类,该升级程序是要在类A中新加两个属性:
BEGIN_UPGRADE_CLASS(A,2)
ADD_NON_OBJECT_PROPERTY(std::wstring,str)
ADD_OBJECT_PROPERTY(UniIdentity,b,类B的Guid)
END_UPGRADE_CLASS
其中,BEGIN_UPGRADE_CLASS(A,2)表示类A升级开始,类A的版本从1升级到2,版本号默认从1开始。当有升级的时候,版本号依次累加。END_UPGRADE_CLASS表示升级结束,新增宽字符串属性通过宏ADD_NON_OBJECT_PROPERTY(std::wstring,str)声明,新增类类型属性通过宏ADD_OBJECT_PROPERTY(UniIdentity,b,类B的Guid)声明。在启动当前版本软件时,底层框架加载升级宏。
S313,将升级宏注册到升级管理器中,确定与升级宏对应的升级例程。
在加载升级宏时,电子设备将升级宏注册到升级管理器中。如上文所述,在底层框架中封装有适用于各种类型的升级例程,升级例程与升级宏是对应的,因此,在将升级宏注册到升级管理器中,就可以确定与升级宏对应的升级例程。在当前版本软件启动成功,打开低版本文件时,会根据实际情况对目标文件中的升级目标进行升级。
S32,读取目标文件,以确定目标文件的文件属性信息。
详细请参见图3所示实施例的S22,在此不再赘述。
S33,基于升级宏以及目标文件的文件属性信息对目标文件中对应的升级目标进行升级,以升级目标文件。
具体地,上述S33可以包括:
S331,利用目标文件的文件属性信息确定目标文件中各个目标的文件版本号。
在目标文件的文件属性信息,即SchemaOfFile,包括有各个目标的文件版本号。
S332,比较各个目标的文件版本号与对应的代码版本号,确定升级目标。
将SchemaOfFile和SchemaOfCode中的版本号进行对比,如果SchemaOfFile.Version<SchemaOfCode.Version,则认为文件中该类的版本号低于代码中对应类的版本号,则该类需要升级,就可以确定出升级目标。
在确定出升级目标之后,就会到升级管理器中去具体的升级例程对其进行升级。
S333,基于升级宏对升级目标进行升级,以升级目标文件。
关于具体的升级过程,请参见图3所示实施例的S23的详细描述,在此不再赘述。
本实施例提供的文件升级方法,在当前版本软件启动时,获取代码属性信息并将升级宏注册到升级管理器中,为后续的文件升级做好准备,可以减少后续文件升级的处理时间,提高了文件升级的效率。通过将文件版本号与代码版本号以确定出升级目标,可以准确地确定出升级目标,保证了文件升级的可靠性。
在本实施例的一个具体实施方式,如图8所示,在APP启动时,将所有类的Schema信息加载到内存中,利用升级宏中的目标版本号更新SchemaOfCode中类和属性的版本号;再将升级宏注册到升级管理器;进行其他环境初始化,最后APP启动成功。
在本实施例中还提供了一种文件升级装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种文件升级装置,如图9所示,包括:
获取模块41,用于获取待更新目标对应的升级宏,所述升级宏包括升级方式;
读取模块42,用于读取目标文件,以确定所述目标文件的文件属性信息;
升级模块43,用于基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件。
本实施例提供的文件升级装置,通过升级宏的方式为底层开发框架提供升级能力,在不需要额外大量编码的情况下,自动完成文件的升级,提高了文件升级的效率。
本实施例中的文件升级装置是以功能单元的形式来呈现,这里的单元是指ASIC电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
上述各个模块的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
本发明实施例还提供一种电子设备,具有上述图9所示的文件升级装置。
请参阅图10,图10是本发明可选实施例提供的一种电子设备的结构示意图,如图10所示,该电子设备可以包括:至少一个处理器51,例如CPU(Central Processing Unit,中央处理器),至少一个通信接口53,存储器54,至少一个通信总线52。其中,通信总线52用于实现这些组件之间的连接通信。其中,通信接口53可以包括显示屏(Display)、键盘(Keyboard),可选通信接口53还可以包括标准的有线接口、无线接口。存储器54可以是高速RAM存储器(Random Access Memory,易挥发性随机存取存储器),也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器54可选的还可以是至少一个位于远离前述处理器51的存储装置。其中处理器51可以结合图9所描述的装置,存储器54中存储应用程序,且处理器51调用存储器54中存储的程序代码,以用于执行上述任一方法步骤。
其中,通信总线52可以是外设部件互连标准(peripheral componentinterconnect,简称PCI)总线或扩展工业标准结构(extended industry standardarchitecture,简称EISA)总线等。通信总线52可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器54可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);存储器也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard diskdrive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);存储器54还可以包括上述种类的存储器的组合。
其中,处理器51可以是中央处理器(英文:central processing unit,缩写:CPU),网络处理器(英文:network processor,缩写:NP)或者CPU和NP的组合。
其中,处理器51还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,缩写:ASIC),可编程逻辑器件(英文:programmable logic device,缩写:PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:CPLD),现场可编程逻辑门阵列(英文:field-programmable gate array,缩写:FPGA),通用阵列逻辑(英文:generic arraylogic,缩写:GAL)或其任意组合。
可选地,存储器54还用于存储程序指令。处理器51可以调用程序指令,实现如本申请图1、3以及7实施例中所示的文件升级方法。
本发明实施例还提供了一种非暂态计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的文件升级方法。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard DiskDrive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (11)
1.一种文件升级方法,其特征在于,包括:
获取待更新目标对应的升级宏,所述升级宏包括升级方式;
读取目标文件,以确定所述目标文件的文件属性信息;
基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件。
2.根据权利要求1所述的方法,其特征在于,所述基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件,包括:
获取当前版本软件对应的代码属性信息;
利用所述目标文件的文件属性信息确定所述升级目标的文件属性信息;
利用所述升级宏对所述升级目标的文件属性信息进行升级,得到升级结果;
基于所述代码属性信息将所述升级结果处理成可识别对象,以升级所述目标文件。
3.根据权利要求2所述的方法,其特征在于,所述利用所述升级宏对所述升级目标的文件属性信息进行升级,得到升级结果,包括:
调用所述升级宏对应的升级例程;
基于所述升级例程对所述升级目标的文件属性信息进行升级,得到所述升级结果。
4.根据权利要求3所述的方法,其特征在于,所述基于所述升级例程对所述升级目标的文件属性信息进行升级,得到所述升级结果,包括:
读取所述目标文件的二进制数据;
基于所述升级目标的文件属性信息对所述二进制数据进行反序列化,生成内存模型节点;
利用所述升级例程对所述内存模型节点进行升级,得到升级后的内存模型节点。
5.根据权利要求4所述的方法,其特征在于,所述利用所述升级例程对所述内存模型节点进行升级,得到升级后的内存模型节点,包括:
确定所述内存模型节点中的待处理节点;
利用所述升级例程对所述待处理节点进行升级,得到升级后的内存模型节点。
6.根据权利要求4所述的方法,其特征在于,所述基于所述代码属性信息将所述升级结果处理成可识别对象,以升级所述目标文件,包括:
利用所述代码属性信息对所述升级后的内存模型节点进行反序列化,得到所述可识别对象;
将所述可识别对象添加到所述目标文件对应的文档中,以升级所述目标文件。
7.根据权利要求1所述的方法,其特征在于,所述升级宏还包括目标版本号,所述获取所述待更新目标对应的升级宏,包括:
启动当前版本软件,以确定所述当前版本软件的代码属性信息;
加载所述升级宏,并利用所述目标版本号更新所述代码属性信息中对应目标的代码版本号;
将所述升级宏注册到升级管理器中,确定与所述升级宏对应的升级例程。
8.根据权利要求7所述的方法,其特征在于,所述基于所述升级宏对所述升级目标的目标文件中对应的目标进行升级,以升级所述目标文件,还包括:
利用所述目标文件的文件属性信息确定所述目标文件中各个目标的文件版本号;
比较所述各个目标的文件版本号与对应的所述代码版本号,确定所述升级目标。
9.一种文件升级装置,其特征在于,包括:
获取模块,用于获取待更新目标对应的升级宏,所述升级宏包括升级方式;
读取模块,用于读取目标文件,以确定所述目标文件的文件属性信息;
升级模块,用于基于所述升级宏以及所述目标文件的文件属性信息对所述目标文件中对应的升级目标进行升级,以升级所述目标文件。
10.一种电子设备,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1-8中任一项所述的文件升级方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使计算机执行权利要求1-8中任一项所述的文件升级方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110701033.9A CN113419759A (zh) | 2021-06-21 | 2021-06-21 | 文件升级方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110701033.9A CN113419759A (zh) | 2021-06-21 | 2021-06-21 | 文件升级方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113419759A true CN113419759A (zh) | 2021-09-21 |
Family
ID=77716430
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110701033.9A Pending CN113419759A (zh) | 2021-06-21 | 2021-06-21 | 文件升级方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419759A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001023998A1 (en) * | 1999-09-24 | 2001-04-05 | Phoenix Technologies Ltd. | Software development system for facilitating selection of components |
CN1578949A (zh) * | 2001-11-09 | 2005-02-09 | 无锡永中科技有限公司 | 数据对象导向的储存系统 |
CN1866252A (zh) * | 2006-02-20 | 2006-11-22 | 华为技术有限公司 | 不同版本的配置数据间进行转换的方法和系统 |
CN110058876A (zh) * | 2019-04-25 | 2019-07-26 | 厦门网宿有限公司 | 扩展wireshark软件兼容性的方法、装置、服务器及存储介质 |
CN111507057A (zh) * | 2020-04-22 | 2020-08-07 | 深圳市亚派光电器件有限公司 | Pads图纸的输出方法、装置及计算机可读存储介质 |
-
2021
- 2021-06-21 CN CN202110701033.9A patent/CN113419759A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001023998A1 (en) * | 1999-09-24 | 2001-04-05 | Phoenix Technologies Ltd. | Software development system for facilitating selection of components |
CN1578949A (zh) * | 2001-11-09 | 2005-02-09 | 无锡永中科技有限公司 | 数据对象导向的储存系统 |
CN1866252A (zh) * | 2006-02-20 | 2006-11-22 | 华为技术有限公司 | 不同版本的配置数据间进行转换的方法和系统 |
CN110058876A (zh) * | 2019-04-25 | 2019-07-26 | 厦门网宿有限公司 | 扩展wireshark软件兼容性的方法、装置、服务器及存储介质 |
CN111507057A (zh) * | 2020-04-22 | 2020-08-07 | 深圳市亚派光电器件有限公司 | Pads图纸的输出方法、装置及计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
何见坤;: "通用嵌入式参数设置系统设计与实现", 电脑编程技巧与维护, no. 09, 18 September 2018 (2018-09-18), pages 46 - 49 * |
张杰: "基于VBA的Word XP文件向XML的转换", 微型电脑应用, no. 04, 20 April 2003 (2003-04-20), pages 62 - 63 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11347555B2 (en) | Integrated system to distribute and execute complex applications | |
KR101795844B1 (ko) | 런타임 시스템 | |
CN111061643B (zh) | Sdk集群的兼容性检测方法、装置、电子设备及存储介质 | |
CN111897570B (zh) | 一种基于Maven插件的多依赖项文件提取方法及装置 | |
US11016785B2 (en) | Method and system for mirror image package preparation and application operation | |
CN111068328A (zh) | 游戏广告配置表格的生成方法、终端设备及介质 | |
WO2018090528A1 (zh) | 一种镜像包制作、应用运行方法及系统 | |
JPWO2017033441A1 (ja) | システム構築支援システム、方法および記憶媒体 | |
CN115185550A (zh) | 服务部署方法、装置、计算机设备及存储介质 | |
US20230266958A1 (en) | Method for creating private image in public cloud and related device | |
US7958490B2 (en) | System for automating the definition of application objects supporting undoing, redoing compressing and logging operations | |
CN117493199A (zh) | 代码校验方法、装置、计算机设备和存储介质 | |
CN115794214B (zh) | 应用模块元数据管理方法、设备、存储介质及装置 | |
CN114490103A (zh) | 一种操作系统接口调用方法、装置以及电子设备 | |
WO2017036197A1 (zh) | 一种网元模型管理方法及装置 | |
CN114721647B (zh) | 一种基于无代码应用开发的面向对象编程方法 | |
CN113419759A (zh) | 文件升级方法、装置及电子设备 | |
CN115220873A (zh) | 一种在Android系统中运行Open Harmony应用的方法 | |
CN112988602B (zh) | 验证平台的生成方法、装置、计算机设备和存储介质 | |
CN115544968A (zh) | 一种兼容多项目设备树的方法、系统、设备和存储介质 | |
CN114860202A (zh) | 项目运行方法、装置、服务器及存储介质 | |
CN113821234B (zh) | 操作系统升级方法、设备、存储介质及计算机程序产品 | |
CN113901025A (zh) | 数据库管理方法、装置、设备和存储介质 | |
CN113434938A (zh) | Bim模型的检查方法、装置、计算机设备及存储介质 | |
CN111176648B (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 |