[0001]
本发明涉及数据存储技术领域,尤其涉及一种文件存储方法、终端、计算机可读存储介质。
背景技术:[0002]
在进行文件管理时,文件与文件之间通常存在一定的层级关系,而为了满足实际的应用需求,会建立一些文件或者一些目录,以适应对文件的管理,比如存储、删除、查找以及读写等等不同的应用需求。
[0003]
在现有的文件管理中,在进行文件的存储以及删除时,文件的存储和删除都是处于一个静态的过程,也就是文件存储的位置固定不变的,且在进行文件删除时,只有进行存储的所有文件均被删除之后内存才可以再次被使用,当文件中的部分文件被删除时,所释放的内存虽然处于空闲状态,但并不能被使用,这样在一定程度上降低了系统内存的使用效率,特别是对于那些小型文件系统而言,系统内存的使用效率过低时,也会影响系统的实际运行。
技术实现要素:[0004]
基于此,有必要针对现行文件存储方法的弊端,提供一种文件存储方法、终端和计算机可读存储介质,用于在进行文件存储时,动态的进行文件的存储,提高了文件存储的时效性和使用灵活性。
[0005]
为实现上述目的,本发明提供的一种文件存储方法,所述文件存储方法包括:
[0006]
当接收到文件存储指令时,识别所述文件存储指令所包含的目录信息,并接收输入的待存储文件;
[0007]
获取与所述目录信息相匹配的内存分配表;
[0008]
根据所述待存储文件的文件大小信息确定所述内存分配表中是否存在可使用内存;
[0009]
当确定所述内存分配表中存在可使用内存时,将所述待存储文件进行存储并更新所述目录信息。
[0010]
此外,为实现上述目的,本发明还提供一种终端,所述终端包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上述所述的文件存储方法的步骤。
[0011]
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被一个或多个处理器执行时,使得一个或多个处理器执行如上述所述的文件存储方法的步骤。
[0012]
上述文件存储方法、终端和计算机可读存储介质,在接收到文件存储指令时,首先识别文件存储指令中所包含的目录信息,并接收所上传的待存储文件,然后根据所识别的目录信息获取相匹配的内存分配表,进而根据待存储文件的文件大小在内存分配表中选择
合适的可使用内存,最后根据所得到的可使用内存将待存储文件进行存储,并且根据所存储的待存储文件更新对应的目录信息。实现了在进行文件存储时,利用内存分配表实时记录更新内存的实际使用状态,动态的进行文件的存储,避免文件的固定存储带来的内存使用效率低的问题,提高了文件存储的时效性和使用灵活性。
[0013]
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
[0014]
图1为一个实施例中文件存储方法的流程示意图;
[0015]
图2为一个实施例中确定是否存在可使用内存的步骤的流程示意图;
[0016]
图3为一个实施例中将待存储文件进行存储的步骤的流程示意图;
[0017]
图4为一个实施例中根据目录信息的步骤的流程示意图;
[0018]
图5为一个实施例中目录信息的更新变化过程的流程框图;
[0019]
图6为另一个实施例中文件存储方法的流程示意图;
[0020]
图7为一个实施例中提供的终端的示意性框图。
具体实施方式
[0021]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0022]
附图中所示的流程图仅是示例说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解、组合或部分合并,因此实际执行的顺序有可能根据实际情况改变。
[0023]
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
[0024]
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
[0025]
参照图1,图1为一个实施例中文件存储方法的流程示意图。该文件存储方法包括:
[0026]
步骤s10、当接收到文件存储指令时,识别文件存储指令所包含的目录信息,并接收输入的待存储文件。
[0027]
其中,目录信息是将需要进行存储的文件进行存储的位置信息,文件存储指令是用户通过相应的操作而触发的,比如触控操作界面上的相关按键,包括虚拟按键和物理按键。在需要进行文件存储时,用户通过相应的操作发出文件存储指令,同时选择相应的存储位置,即目录信息,使得目录信息包含的文件存储指令中。
[0028]
在文件管理过程中,当接收到文件存储指令时,识别文件存储指令中所包含的目录信息,以确定待存储文件所需要存储的位置信息,同时接收所上传的待存储文件。具体地,在需要进行文件存储时,用户通过相应的操作触发文件存储指令,此时将会在相应的界
面上进行反馈,以使得用户进行操作实现待存储文件的上传,在终端根据触发的文件存储指令进行相应的反馈时,可以在终端界面的相应位置上显示存储文件的上传界面,用户通过选择操作选择需要进行存储的待存储文件,以进行文件的上传。
[0029]
终端在接收到文件存储指令时,除了接收用户所上传的待存储文件,还将识别文件存储指令所包含的目录信息,通过识别得到相应的目录信息确定待存储文件进行存储的位置。其中,终端至少包括智能卡、usbkey以及手环等,系统即为终端内部的文件存储系统。
[0030]
步骤s20、获取与目录信息相匹配的内存分配表。
[0031]
其中,内存分配表是用于记录终端内可使用内存的表,且内存分配表中记录有内存地址的实际使用情况。
[0032]
在接收到文件存储指令之后,识别文件存储指令所包含的目录信息以确定待存储文件所存储的位置信息,在确定了文件存储的位置信息之后,获取相应的内存分配表,以确定待存储文件所存储的具体位置。
[0033]
具体地,获取与目录信息相匹配的内存分配表的步骤包括:识别目录信息的标识信息,并基于标识信息在存储器中获取与标识信息相匹配的内存分配表。其中,标识信息是目录信息的唯一标识,可以是数字,也可以是文字。具体地,通过识别目录信息的标识信息,然后在相应的存储器中获取相匹配的内存分配表。由于终端可以与若干数量的服务器相关联,也就是数据可能存储在不同的服务器中,因此在通过目录信息确定相应的存储位置时,在内存分配表的记录存储器中获取相应的内存分配表,进而在内存分配表中选择进行文件存储的具体位置。
[0034]
步骤s30、根据待存储文件的文件大小信息确定内存分配表中是否存在可使用内存。
[0035]
在得到相匹配的内存分配表之后,需要确定内存分配表中是否存在可以进行文件存储的可使用内存,以进行文件的存储。具体地,在接收到上传的待存储文件信息以及相匹配的内存分配表时,根据待存储文件的文件大小信息在内存分配表中获取可使用内存。
[0036]
在实际应用中,并不是终端中所存在的内存大于需要进行存储的文件的大小时即可进行文件的存储,对于一个文件而言,文件的存储需要具有一定的关联性,在进行文件的存储时,通常情况下不能将文件进行分割,得到若干小的文件然后进行存储,若将文件进行分割会增加相应的存储复杂性,并且在进行文件读取时,需要在各地址中读取对应的文件然后进行组合得到总的文件,在一定程度上增加了文件读取的复杂性,因此在接收到待存储文件之后,根据待存储文件的实际文件大小来确定内存分配表中是否存在可使用内存。
[0037]
步骤s40、当确定内存分配表中存在可使用内存时,将待存储文件进行存储并更新目录信息。
[0038]
在确定内存分配表中存在可使用内存时,将读取可使用内存的内存地址,进而将待存储文件存储在相应的可使用内存中,同时,由于存储了新的文件,因此还将更新预先所得到的目录信息。
[0039]
具体地,目录信息中还记录有文件之间的关系,处于同一目录信息中的文件与目录信息之间也存在一定的关系。比如将文件a存储在目录b中,目录b中已经存储有文件c和文件d,在将文件a存储在目录b中之后,需要更新目录b所记录的信息,目录信息中包含有自身的标识信息,对于目录b来说,存储在目录b中的文件a、文件c和文件d与目录b之间存在一
定的关系,文件a是新存储在目录b的文件,因此对于目录b而言,自身所包含的目录信息需要进行更新,即建立文件a与目录b之间的关系,由于是将文件a存储在目录b中,因此在文件a所对应的文件信息中需要记录有目录b的相关信息。
[0040]
在此,假定之前存储在目录b中的文件c和文件d之间的存储先后顺序关系为文件c在前、文件d在后。此时在目录b中创建一个文件a,将需要修改文件d的后置链接信息为文件a对应的文件链接信息,并把文件a的前置链接文件信息设置为文件d对应的文件链接信息,同时把文件a的父目录信息设置成目录b即可。
[0041]
上述实施例的文件存储方法,在接收到文件存储指令时,首先识别文件存储指令中所包含的目录信息,并接收所上传的待存储文件,然后根据所识别的目录信息获取相匹配的内存分配表,进而根据待存储文件的文件大小在内存分配表中选择合适的可使用内存,最后根据所得到的可使用内存将待存储文件进行存储,并且根据所存储的待存储文件更新对应的目录信息。实现了在进行文件存储时,利用内存分配表实时记录更新内存的实际使用状态,动态的进行文件的存储,避免文件的固定存储带来的内存使用效率低的问题,同时将文件串联起来,形成一种左右双向链表,上下树形结构的形式以用于对文件进行管理,提高了文件存储的时效性和使用灵活性。
[0042]
进一步地,在一个实施例中,参照图2,图2为一个实施例中确定是否存在可使用内存的步骤的流程示意图。
[0043]
具体地,步骤s30,根据待存储文件的文件大小信息确定内存分配表中是否存在可使用内存,包括:
[0044]
步骤s301、获取内存分配表所包含的内存条目的内存信息。
[0045]
其中,内存条目是可使用内存的地址信息。具体地,内存分配表可如下表1所示,与内存分配表对应的内存地址状态信息如下表2所示,其中,null代表空白状态。
[0046]
表1
[0047]
0x300000x3e000nullnullnullnullnullnullnullnullnullnullnullnull
[0048]
表2
[0049]
0x300000x304000x308000x30c000x31000
ꢀꢀꢀ
0x32000
ꢀꢀꢀ
0x33000
ꢀꢀꢀ
0x34000
ꢀꢀꢀ
0x35000
ꢀꢀ
0x35c000x36000
ꢀꢀꢀ
0x37000
ꢀꢀꢀ
0x38000
ꢀꢀꢀ
0x39000
ꢀꢀꢀ
0x3a000
ꢀꢀꢀ
0x3b000
ꢀꢀꢀ
0x3c000
ꢀꢀꢀ
0x3d000
ꢀꢀꢀ
[0050]
需要说明的是,表1中所记录的地址信息为一个实际的地址信息,而表2中的所记录的地址信息是一个地址段的首地址,以表2中的0x30000为例,实际上0x30000代表的是0x30000至0x30400这一段内存地址。
[0051]
在上表1中,每一个横行代表一个条目,每个条目代表某个空块的首地址和尾地址,表1中的每一行代表表2中的某一个连续的内存地址,也就是内存地址信息中连续存在的可使用内存的地址信息会被记录在内存分配表中。假设当前系统的内存中没有存储有任何的文件,那么此时表2中所示的地址信息状态表中所有的内存地址均处于可使用状态,即此时所对应的内存分配表所记录的信息为表1所示状态,第一列记录可使用内存的首内存地址,第二列记录可使用内存的尾内存地址。
[0052]
表2中每个小格代表一页非易失内存,这里假定非易失内存单页大小是1k,起始地址是0x30000,终止地址是0x3e000,且假定申请的空间都是1k大小的整数倍,在实际的应用中,可以利用特定的标记代表空块的实际状态,比如可以用绿色代表未被使用空块,红色代表用户申请的非易失内存空间,也就是文件占据的空间。上表1和表2中对应的状态是用户没有创建任何文件时的内存分配表以及对应的内存地址状态信息。
[0053]
需要说明的是,表1中可记录的内存条目的数量是人为设置的,可以设定一个数量阈值,即只能存储一定数量的内存条目,也可以是不做限定,即可以无限进行记录存储。对于可以无限进行记录存储的情况不做细致描述,对于内存分配表中所记录的内存条目的数量设定有一个数量阈值的情况做如下描述。
[0054]
假设,内存分配表中可存储的内存条目的数量为x,当需要记录在内存分配表中的内存条目的数量大于x时,比如内存条目数量为x+1时,便需要再申请一张内存分配表用于记录内存条目,即此时的内存分配表的数量为2,而第二张内存分配表用于记录第一张内存分配表没有记录的内存条目。简单地说,也就是当内存条目的总数为nx+1时,那么此时所需要的内存分配表的数量为n+1,且只要内存分配表不能完全记录所有的内存条目,便会立刻申请一张内存分配表,以此类推直到将所有的内存条目记录存储完成。
[0055]
具体地,内存分配表1中可使用的内存条目的记录数量上限为50,即可存储的内存条目的数量为50,若此时根据内存地址状态信息得到的可使用内存条目的数量为51,那么显然内存分配表1不能记录完全,因此此时将申请一张内存分配表2,然后使用内存分配表2记录没有记录在内存分配表1中的内存条目,同时建立内存分配表1与内存分配表2之间的关联关系,比如将内存分配表2的地址存储在内存分配表1中,此时可以在内存分配表中预先设定一个地址存储空间,也就是内存分配表1中已经存在一个存储空间用于存储内存分配表2的地址,还可以将内存分配表中的某一个内存条目存储在申请的内存分配表中,以使得内存分配表中存在一个用于进行地址存储的空间,也就是在内存分配表1中选择某一个内存条目,将其存储在至内存分配表2中,以使得内存分配表1中存在一个处于空白状态的条目,进而将内存分配表2的地址存储在内存分配表1中处于空白状态的条目中。
[0056]
同样地,当内存条目的数量为101时,将需要在申请了内存分配表2的基础上再次申请内存分配表3进行记录存储。也就是说,当内存分配表中可以记录的内存条目的数量有限制时,内存分配表是可以一直申请的,主要限制在于系统的实际内存大小。
[0057]
当地址信息为0x32000至0x36000被所创建的文件占用时,此时的内存分配表将会
由表1所示的状态变为如下表3所示。
[0058]
表3
[0059]
0x300000x320000x360000x3e000nullnullnullnullnullnullnullnullnullnull
[0060]
在接收到上传的待存储文件之后,需要确定是否可以将待存储文件存储在终端中,在确定是否可以将待存储文件进行存储时,首先获取内存分配表中所包含的内存条目对应的内存信息,在内存分配表中记录有可使用内存的具体地址信息。
[0061]
在实际应用过程中,由于内存之间存在一定的连续性,而在实际的文件管理时,除了文件存储之外还有文件的删除,因此内存中可使用内存的地址并不一定是连续的状态,也就是此时的内存地址存在若干段可使用内存,但是并不是所有的可使用内存都可以存储待存储文件,主要是可使用内存的内存信息,包括但不限于内存大小,因此在确定是否存在可使用内存时,首先获取内存分配表中所包含的内存条目所对应的内存信息。
[0062]
步骤s302、读取待存储文件的文件信息,并将文件信息对应的文件大小与内存信息对应的内存大小进行对比。
[0063]
在得到确定是否存在可使用内存时,主要利用实际的文件大小以及内存条目的内存大小来确定,因此还将读取待存储文件的文件信息,进而将文件信息中的文件大小与内存条目的内存信息中的内存大小进行对比。
[0064]
在实际应用中,为了保证文件存储的完整性,需要保证进行文件存储的内存大小不小于进行存储的文件的文件大小,因此直接将待存储文件的文件大小与内存条目的内存信息的内存大小进行对比,以在确定内存分配表中的选择出合适的进行文件存储的内存空间。
[0065]
步骤s303、当文件大小小于或者等于内存大小的最大内存值时,确定内存分配表中存在可使用内存。
[0066]
利用文件大小与内存大小的对比结果确定内存分配表中是否存在可使用内存,具体地,在文件大小小于或者等于内存大小时,确定内存分配表中存在可使用内存。
[0067]
步骤s304、当文件大小大于内存大小的最大内存值时,确定内存分配表中不存在可使用内存。
[0068]
在文件大小大于内存大小的最大内存值时,确定内存分配表中不存在可使用内存。具体地,终端中可使用的内存的大小通常情况下是比需要进行存储的文件的文件大小要大,但是并不是说可以直接将待存储文件进行存储,由于已存储文件所使用的内存地址并不一定是连续的,因此在内存分配表中存在有若干可以进行文件存储的内存地址,在内存分配表中所记录的内存条目中不存在内存大小大于文件大小的内存条目时,将确定内存分配表中不存在可使用内存,同时在没有可使用内存时,可以发出相应的提示信息,以使得
用户知道当前不存在可使用内存。
[0069]
另外,在内存分配表中没有可使用内存时,还可以将终端的实际内存状态进行展示,以使得用户可以根据实际内存状态进行相应的操作,比如文件删除,以完成待存储文件的存储。
[0070]
进一步地,在一个实施例中,参照图3,图3为一个实施例中将待存储文件进行存储的步骤的流程示意图。
[0071]
具体地,步骤s40,当确定内存分配表中存在可使用内存时,将待存储文件进行存储并更新目录信息,包括:
[0072]
步骤s401、当确定内存分配表中存在可使用内存时,在内存分配表中根据文件大小选择得到目标内存条目。
[0073]
在确定内存分配表中存在可使用内存时,根据待存储文件的实际文件大小在可使用内存中选择得到对应的目标内存条目。具体地,在内存分配表中存在的可使用内存中的内存条目的数量和大小是不确定的,因此在可使用内存中选择进行待存储文件的存储时的目标内存条目也不是完全随机的,比如待存储文件的文件大小为10k,目录信息中可以进行文件存储的内存条目的数量有5个,且分别对应的内存大小分别为10k、11k、12k、12k以及20k,在实际应用中,这5个内存条目均可以进行文件的存储,但是并不是随机的在这5个内存条目中任意选择一个进行待存储文件的存储,而是根据实际的大小关系确定当前可以进行文件存储的内存条目。
[0074]
在一实施例中,在确定目标内存条目时,步骤s401包括:当确定内存分配表中存在可使用内存时,在内存分配表中获取可选择内存条目;获取可选择内存条目中内存大小大于或者等于文件大小的第一内存条目;在第一内存条目中选择与文件大小绝对差值最小的内存条目作为第二内存条目,并根据第二内存条目的数量从第二内存条目中确定目标内存条目。
[0075]
其中,第一内存条目与第二内存条目均为内存条目的一个集合,数量可以是一个也可以是多个。
[0076]
在确定内存分配表中存在可使用内存时,首先在内存分配表中获取可选择内存条目,然后根据可选择内存条目的内存大小与文件大小进行大小比较,得到相应的第一内存条目,然后根据内存大小与文件大小的大小关系得到相应的第二内存条目,进而根据第二内存条目确定对应的目标内存条目。
[0077]
具体地,在确定内存分配表中存在可使用内存时,确定内存分配表中对应的可选择内存条目,并读取所有的可选择内存条目分别对应的内存大小,然后将所读取的内存大小与待存储文件的文件大小进行比较,得到各可使用内存条目中绝对差值最小的内存条目作为进行文件存储的目标内存条目。在实际判断过程中,将内存大小与文件大小进行大小比较,如上述所描述的,计算5个可使用内存条目的内存大小与文件大小的绝对差值,绝对差值结果分别为0、1、2、2以及10,此时将会选择绝对差值为0所对应的内存条目作为进行待存储文件存储的目标内存条目。
[0078]
在文件存储过程中,内存分配表中所存在的可使用的内存条目的数量可以是多个,且内存条目对应的内存大小也是可以很大的,若在进行待存储文件的存储时,随机的选择一个可使用内存条目作为待存储文件进行文件存储的内存信息,在一定程度上会影响系
统内存的有效利用,比如待存储文件的文件大小为10k,若此时存在内存大小为10k的内存条目,但是在进行文件存储时却选择了一个内存大小为18k的内存条目进行文件存储,那么此时内存分配表中原有的可使用的且内存大小为10k的内存条目没有被使用,同时本可以存储一个18k大小文件的内存条目变成只能存储8k文件,在不将文件进行切分存储时,此时系统中只能存储一个文件大小为10k和一个文件大小为8k的文件,若此时需存储一个文件大小大于10k的文件时,便需要使用其他的内存条目进行文件存储。通过选择大小较相近的内存条目进行文件的存储,可提高系统内存的使用效率。
[0079]
进一步地,根据第二内存条目的数量从第二内存条目中确定目标内存条目,包括:当第二内存条目的数量等于一时,确定第二内存条目为目标内存条目;当第二内存条目的数量大于一时,根据地址读取规则在第二内存条目中得到目标内存条目。
[0080]
由于在实际的文件管理过程中,除了进行文件的存储还包括文件的删除,因此在内存分配表中可使用内存条目的数量是若干且不作限制的,且可使用内存条目的大小也是可以相同的,因此使得第二内存条目的数量就可以是多个,也可以是一个。当第二内存条目的数量为一时,那么将直接确定第二内存条目为目标内存条目;当第二内存条目的数量大于一时,也就是说存在多个内存大小相同的可使用内存,将根据地址读取规则在第二内存条目中得到目标内存条目。
[0081]
在实际的判断过程中,在读取内存分配表中的内存条目对应的相关信息时,有着一定的读取顺序,具体为内存地址信息的读取顺序,即地址读取规则,在实际使用过程中,在以默认的地址读取顺序进行地址读取时,可使用内存条目的获取也有着一定的先后顺序,若此时第二内存条的数量为三时,分别为内存条目1、内存条目2以及内存条目3,且在进行读取的过程中的读取顺序分别为内存条目1、内存条目2、内存条目3,那么此时将会将内存条目1作为目标内存条目,当顺序为内存条目2、内存条目1、内存条目3时,将内存条目2作为目标内存条目。
[0082]
步骤s402、基于目标内存条目对应的文件存储地址将待存储文件进行存储。
[0083]
在得到对待存储文件进行文件存储的目标内存条目之后,将根据目标内存条目所对应的文件存储地址将待存储文件进行存储。
[0084]
步骤s403、当检测到待存储文件存储完成时,更新目录信息。
[0085]
在检测到待存储文件的存储完成时,将更新预先所得到的目录信息。具体地,在将待存储文件存储在相应的目录之下之后,对应的目录中所包含的文件信息发生了相应的变化,因此需要对目录信息进行相应的更新,以保证目录信息的实时性,保证文件存储的实时性。
[0086]
进一步地,在一个实施例中,参照图4,图4为一个实施例中根据目录信息的步骤的流程示意图。
[0087]
具体地,步骤s403,当检测到待存储文件存储完成时,更新目录信息,包括:
[0088]
步骤s4031、当检测到待存储文件存储完成时,生成包含待存储文件的文件信息的待处理目录信息,并读取相邻前一个所存储的文件所包含的第一文件信息。
[0089]
当检测到待存储文件存储完成时,首先生成包含有待存储文件的文件信息的待处理目录信息,并读取相邻前一个所存储的文件所包含的第一文件信息。具体地,在待存储文件的存储完成时,将根据待存储文件以及目录信息生成得到对应的待处理目录信息,其中
待处理目录信息是根据预先所得到的目录信息而得到的,另外,存储在某一个目录中的文件在存储时间上有着一定的先后顺序,在完成待存储文件的存储时,还将读取相邻前一个文件所包含的第一文件信息,也就是读取在待存储文件之前完成存储的一个文件的第一文件信息,进而根据所得到的第一文件信息对目录信息进行更新。
[0090]
步骤s4032、根据待存储文件的文件信息以及第一文件信息更新目录信息。
[0091]
在得到第一文件信息之后,将根据待存储文件的文件信息以及第一文件信息对目录信息进行更新。具体地,第一文件信息与目录信息之间存在一定的关联关系,具体体现在目录信息中存储有第一文件信息中的相关信息,第一文件信息中也存储有目录信息的相关信息,在第一文件信息中,由于第一文件信息所对应的文件是待存储文件进行存储之前的最后一个文件,因此第一文件信息中需要记录当前对应的文件为最后一个文件的记录信息。
[0092]
在实际的根据待存储文件的文件信息以及第一文件信息进行目录信息的更新过程时,主要包括有:根据待存储文件的文件信息更新第一文件信息中的后置链接信息,以及根据第一文件信息更新待存储文件的文件信息中的前置链接信息,以建立待存储文件与相邻前一个所存储的文件之间的关联关系;将待存储文件的文件信息中的后置链接信息设置为空白状态,并根据目录信息设置待存储文件的文件信息的父目录信息,以得到更新后的目录信息。
[0093]
目录信息中所记录的信息包括但不限于有当前文件、前置链接信息、后置链接信息、父目录信息以及子目录信息,其中,在文件为目录下第一个文件时,此时文件对应的文件信息中的前置链接信息将设定为与父目录中所记录的信息相同,即此时的前置链接信息与父目录信息相同,同样的,对于后置链接信息、父目录信息以及子目录信息也是同样的操作。当文件为存储在某一个目录中的第一个文件时,在第一个文件对应的相关信息中记录有对应的目录文件的相关信息,使得在对目录进行查看时,可以快速的获取与目录相关的文件有哪些,同样对于存储在第一个文件的目录下的文件,也会建立与此第一个文件之间的关系,通过建立上下层级文件之间的关系以使得文件之间的关系形成一种树形结构,便于对文件进行查看。
[0094]
在待存储文件存储在对应的目录中之前,第一文件信息中的后置链接信息为空白状态,由于待存储文件的存储,此时第一文件信息的后置链接信息将不再是空白状态,而是记录着待存储文件的文件链接信息,同样,对于待存储文件的文件信息中的前置链接信息将会记录着第一文件信息对应的文件链接信息,同时,待存储文件的文件信息的后置链接信息将会处于空白状态,直到目录信息对应的目录中再次进行文件存储时,待存储文件的后置链接信息将会从空白状态变为记录着相应链接信息。
[0095]
在一个实施例中文件创建时动态申请内存地址以进行文件的存储,也就是进行文件存储的地址是随机的。在一个目录信息中,最后一个文件的“后置链接信息”字段都是null,当再在该目录下创建一个新的文件时,之前最后一个文件的“后置链接信息”字段都将修改为新创建的文件的文件头地址,而新创建的文件的“后置链接信息”字段将是null,同样的,此时新创建的文件的“前置链接信息”为原先最后一个文件的链接信息。具体地,在进行文件创建时,目录信息的实际更新变化过程如图5所示。
[0096]
图5(a)为只创建了mf文件,其中mf代表根目录,当在mf文件下创建了ef01文件,其
中ef代表基本文件,即将ef01文件存储在mf文件中时,此时目录信息将变为图5(b)所示的状态,由于ef01文件存储在mf文件中,因此ef01的目录信息中的“父目录”中记录的是“mf”,且mf文件的“子目录”字段为ef01,即建立ef01文件与mf文件之间的关系,使得mf文件与ef01文件之间形成上下关联关系,当在mf文件中继续创建df01文件和df02文件,且先创建df01文件后创建df02文件时,此时的目录信息会变成图5(c)所示的状态,此时ef01和ef02的目录信息的记录状态具体如图5(c)中所示。当需要在ef01文件下创建新文件时,所创建的新文件与ef01文件之间通过“父目录”和“子目录”等信息建立对应的关联关系。也就是在无限制的文件创建过程中,文件之间存在上下关联关系,即文件所形成的结构构造成上下树形结构,可以在查看某一个文件时,知道与此文件相关的文件的信息。
[0097]
需要说明的是,对于一个文件而言,在此文件中可能存储有相关的文件信息,也可能没有存储有相关的文件信息,针对于这两种不同的情况,此文件的目录信息的记录是有不同之处的,对于存在相关联文件时目录信息的记录如上所描述,对于一个独立的且没有与任何文件相关联的文件而言,以图5中的文件创建存储为例进行描述,当在mf文件下已经创建了ef01文件之后,接着创建df01文件和df02文件,此时ef01文件的目录信息的“后置链接信息”由“null”变为“df01”,且df01文件和df02文件的目录信息中的“父目录”中记录的是“mf”,另外,由于df01文件和df02文件下没有创建其他的文件,因此df01文件和df02文件的“子目录”中记录的是“null”。
[0098]
另外,针对于mf文件,当只创建有mf文件时,此时mf文件下没有创建任何的文件,那么此时mf文件对应的目录信息中的“子目录”中记录的是“null”,也就是空白状态,且由于没有任何与mf文件相关联的文件,此时对应的“父目录”、“前置链接信息”以及“后置链接信息”可以预先设定为“null”。
[0099]
当在mf文件中继续创建df01文件和df02文件时,其中df代表专有文件,此时的目录信息将变为图5(c)中所示的状态,由于df01文件与df02文件雨ef01文件均存储在mf文件中,因此ef01文件的“后置链接信息”字段将会变为df01,而df01文件的“前置链接信息”字段为ef01、“后置链接信息”字段为df02,df02文件的“前置链接信息”字段为df01、“后置链接信息”字段为null,使得ef01文件、df01文件以及df02文件之间形成左右关联关系,且df01文件和df02文件的“父目录”字段为mf。当需要接着进行文件的创建时,实际的目录信息的更新逻辑方式与上述过程相同。
[0100]
进一步地,在一实施例中,参照图6,图6为另一个实施例中文件存储方法的流程示意图。
[0101]
具体地,该文件存储方法还包括:
[0102]
步骤s50,当接收到文件删除指令时,识别文件删除指令所包含的待删除文件的文件信息;
[0103]
步骤s60,将待删除文件进行删除,并根据待删除文件的文件信息获取与待删除文件相邻的前文件和后文件;
[0104]
步骤s70,建立前文件与后文件之间的关联关系,以得到更新后的目录信息。
[0105]
在接收到文件删除指令时,识别所接收到的文件删除指令中所包含的待删除文件的文件信息,然后在相应的内存地址中将待删除文件进行删除,同时在识别待删除文件的文件信息时,还将获取与待删除文件相邻的前文件以及后文件,进而在将待删除文件删除
之后,更新对应的目录信息。
[0106]
在确定待删除文件时获取与待删除文件相邻的前文件与后文件,但是在实际应用中,前文件与后文件是否存在与待删除文件的实际位置信息以及对应的目录所包含的文件有关。比如,当待删除文件为存储在对应目录中的第一个文件时,对应的前文件就是父目录所对应的文件;当待删除文件为存储在对应目录中的最后一个文件时,将不存在后文件;同样,在目录中仅存在待删除文件时,将不会存在后文件,且此时对应的前文件就是父目录所对应的文件。不管是何种情况,均需要对目录信息进行更新。
[0107]
在实际的文件管理过程中,除了进行文件的存储,文件的删除也是一个常见的操作,在目录中存在不需要的文件时,需要对其进行删除来释放系统内存空间,以便于后续对系统内存的需求。在对文件进行删除时,重要的是对目录信息进行删除,由上述描述可知,目录信息中包括但不限于有当前文件、前置链接信息、后置链接信息、父目录信息以及子目录信息。在将文件删除之后,由于目录中的文件发生变化,随之而来的便是需要进行目录信息的更新。
[0108]
对目录信息的更新是基于前文件以及后文件所完成的,具体地:根据前文件对应的前文件信息更新后文件对应的后文件信息中的前置链接信息,以及根据后文件对应的后文件信息更新前文件对应的前文件信息中的后置链接信息,以建立前文件与后文件之间的关联关系得到更新后的目录信息。
[0109]
以待删除文件存在相邻的前文件以及后文件为例,前文件为文件1、后文件为文件3、待删除文件为文件2,在没有将文件2删除时,文件1的后置链接信息为文件2的链接信息,文件2的前置链接信息为文件1的链接信息以及后置链接信息为文件3的链接信息,文件3的前置链接信息为文件2的链接信息,在将文件2删除之后,文件2不存在与对应的目录中,此时文件1和文件3处于相邻状态,因此此时文件1的后置链接信息为文件3的链接信息,文件3的前置链接信息为文件1的链接信息,在完成文件1和文件3的相关信息的变更之后,即完成目录信息的更新。
[0110]
在进行文件删除时,若此时内存分配表如下表4所示,其对应的内存地址的状态信息如下表5所示。
[0111]
表4
[0112]
0x600000x60c000x660000x66c000x694000x6fc00nullnullnullnullnullnullnullnullnullnull
[0113]
表5
[0114]
0x600000x604000x608000x60c000x61000
ꢀꢀꢀ
0x62000
ꢀꢀꢀ
0x63000
ꢀꢀꢀ
0x64000
ꢀꢀꢀ
0x65000
ꢀꢀꢀ
0x66000
ꢀꢀꢀ
0x67000
ꢀꢀꢀ
0x68000
ꢀꢀꢀ
0x69000
ꢀꢀꢀ
0x6a000
ꢀꢀꢀ
0x6b000
ꢀꢀꢀ
0x6c000
ꢀꢀꢀ
0x6d000
ꢀꢀꢀ
0x6e000
ꢀꢀꢀ
0x6f000
ꢀꢀ
0x6fc00
[0115]
根据上表4可知,地址信息为0x60c00至0x66000、0x66c00~0x69400被所创建的文件占用,对应的在表5中对应的地址位置将不再可以进行文件的存储,此时在进行文件删除过程中,若将地址信息为0x66c00~0x69400的地址信息所存储的文件进行删除时,那么内存分配表中所记录的信息将会更新变化,由于进行了文件删除,内存分配表所记录的信息将有表4所示变成如下表6所示的状态。
[0116]
表6
[0117]
0x600000x60c000x660000x6fc00nullnullnullnullnullnullnullnullnullnullnullnull
[0118]
具体地,由于地址信息为0x66c00~0x69400所存储的文件被删除,且前后均为空块,即没有存储有文件,因此将进行文件删除的地址信息与前后地址信息进行合并,便得到了如上表6所示的记录状态。
[0119]
参阅图7,图7为一个实施例中提供的终端的示意性框图。本实施例的终端10能够实现上述的文件存储方法中的步骤,相关内容的详细说明请参见上述方法部分,在此不再赘叙。
[0120]
在一个实施例中,所述终端10包括智能卡、usbkey或手环,当然也可以包括其他设备。
[0121]
如图7所示,该终端10包括存储器11和处理器12,处理器11和存储器12通过系统总线13连接,其中,存储器11可以包括非易失性存储介质和内存储器。
[0122]
非易失性存储介质可存储计算机程序。该计算机程序包括程序指令,该程序指令被执行时,可使得处理器11执行任意一种文件存储方法。
[0123]
处理器11用于提供计算和控制能力,支撑整个计算机设备的运行。
[0124]
内存储器为非易失性存储介质中的计算机程序的运行提供环境,该计算机程序被处理器执行时,可使得处理器执行任意一种文件存储方法。
[0125]
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的终端的限定,具体的终端可以包括比图
中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0126]
应当理解的是,处理器11可以是中央处理单元(central processing unit,cpu),该处理器11还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器11可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0127]
其中,存储器12可以是flash芯片、只读存储器、磁盘、光盘、u盘或者移动硬盘等等。
[0128]
其中,存储器中存储有计算机程序,计算机程序被处理器11执行时,使得处理器执行所述计算机程序时实现以下步骤:
[0129]
当接收到文件存储指令时,识别文件存储指令所包含的目录信息,并接收输入的待存储文件;获取与目录信息相匹配的内存分配表;根据待存储文件的文件大小信息确定内存分配表中是否存在可使用内存;当确定内存分配表中存在可使用内存时,将待存储文件进行存储并更新目录信息。
[0130]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0131]
识别目录信息的标识信息,并基于标识信息在存储器中获取与标识信息相匹配的内存分配表。
[0132]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0133]
获取内存分配表所包含的内存条目的内存大小信息;读取待存储文件的文件大小信息,并将文件大小信息对应的文件大小与内存大小信息对应的内存大小进行对比;当文件大小小于或者等于内存大小的最大内存值时,确定内存分配表中存在可使用内存;当文件大小大于内存大小的最大内存值时,确定内存分配表中不存在可使用内存。
[0134]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0135]
当确定内存分配表中存在可使用内存时,在内存分配表中根据文件大小选择得到目标内存条目;基于目标内存条目对应的文件存储地址将待存储文件进行存储;当检测到待存储文件存储完成时,更新目录信息。
[0136]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0137]
当确定内存分配表中存在可使用内存时,在内存分配表中获取可选择内存条目;获取可选择内存条目中内存大小大于或者等于文件大小的第一内存条目;在第一内存条目中选择与文件大小绝对差值最小的内存条目作为第二内存条目,并根据第二内存条目的数量从第二内存条目中确定目标内存条目。
[0138]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0139]
当第二内存条目的数量等于一时,确定第二内存条目为目标内存条目;当第二内存条目的数量大于一时,根据地址读取规则在第二内存条目中得到目标内存条目。
[0140]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0141]
当检测到待存储文件存储完成时,生成包含待存储文件的文件信息的待处理目录信息,并读取相邻前一个所存储的文件所包含的第一文件信息;根据待存储文件信息以及第一文件信息更新目录信息。
[0142]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0143]
根据待存储文件的文件信息更新第一文件信息中的后置链接信息,以及根据第一文件信息更新待存储文件的文件信息中的前置链接信息,以建立待存储文件与相邻前一个所存储的文件之间的关联关系;将待存储文件的文件信息中的后置链接信息设置为空白状态,并根据目录信息设置待存储文件的文件信息的父目录信息,以得到更新后的目录信息。
[0144]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0145]
当接收到文件删除指令时,识别文件删除指令所包含的待删除文件的文件信息;将待删除文件进行删除,并根据待删除文件的文件信息获取与待删除文件相邻的前文件和后文件;建立前文件与后文件之间的关联关系,以得到更新后的目录信息。
[0146]
在一个实施例中,所述处理器执行所述计算机程序时还实现以下步骤:
[0147]
根据前文件对应的前文件信息更新后文件对应的后文件信息中的前置链接信息,以及根据后文件对应的后文件信息更新前文件对应的前文件信息中的后置链接信息,以建立前文件与后文件之间的关联关系得到更新后的目录信息。
[0148]
本申请的实施例中还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序中包括程序指令,所述处理器执行所述程序指令,实现本申请实施例提供的任一项文件存储方法。
[0149]
其中,所述计算机可读存储介质可以是前述实施例所述的计算机设备的内部存储单元,例如所述计算机设备的硬盘或内存。所述计算机可读存储介质也可以是所述计算机设备的外部存储设备,例如所述计算机设备上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。
[0150]
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本发明的保护之内。