文件分配系统中的文件名生成方法及生成装置的制作方法

文档序号:6608772阅读:91来源:国知局
专利名称:文件分配系统中的文件名生成方法及生成装置的制作方法
技术领域
本发明涉及FAT(File Allocation Table,文件分配表)系统,特别是文件分配系统中的文件名生成方法及生成装置。
背景技术
FAT文件系统是微软定义的一种管理磁盘数据空间的文件系统,通过FAT表来管理整个磁盘空间,目前包括FAT12、FAT16和FAT32这3种文件系统,来满足不同存储空间范围的空间管理,FAT12、FAT16和FAT32这3种文件系统中FAT表中的基本单位分别为12个bit,16个bit或32个bit。
在FAT文件系统中,定义了一个根目录区(Root Directory Region),用于存储根目录下的数据项。
在FAT文件系统中,根目录区的基本存储单位为条目(entry),其结构如图1所示,包括以下字段Name(文件或目录的名字)、Ext(扩展名)、Attr(属性)、Case、Time_ms(时间)、Create time(创建时间)、Create date(创建日期)、Accessdate(最近一次访问日期)、Start cluster HI(文件或目录对应数据区的起始簇的高位)、Modify time(最近一次修改时间)、Modify date(最近一次修改日期)、Startcluster LO(文件或目录对应数据区的起始簇的低位)及File size(文件大小)。
每一个文件都对应一个entry项,一个entry项占32个byte,根目录区就是所有entry项的罗列,如果entry到了结束,即没有下一个有效的entry了,FAT通过将entry的byte0置零来表示entry的结束。
从目录区的entry结构可发现,传统的FAT在文件、目录名字的长度上是有限制的,名字为8个字符,扩展名为3个字符,即常说的8.3命名规则。FAT为了实现对名字超过8个字符的文件名的支持,通过扩展了entry的定义来支持,在本发明中,为方便描述,将其命名为长文件名。
FAT通过在常规文件entry的前面依次设置扩展entry项来存储长文件名,扩展entry如图2所示。
在上述的方案中,对于名字超过8个字符的文件或目录,FAT文件系统要存储其文件名或目录名,首先要根据名字的长度计算需要多少个扩展的entry项,然后去申请entry数目,然后根据算法生成长文件名对应的短文件名。
短文件名通常是长文件名的“前几个字符”+“~”+“数字”构成,如“The quick brown fox.exe”对应的短文件名为“Thequi~1.fox”,如果又有一个名称类似的长文件名,如“The quick brown foxl.exe”,则相应的短文件名为“Thequi~2.fox”。
从以上的描述可以发现,FAT文件系统中,长文件名的存储采用短文件名结合长文件名的方案实现,短文件名存在的意义就是为了系统兼容,同时保存文件的长度、存储位置等信息,长文件名采用unicode编码,仅仅用于存储文件名而已。
因此,要存储一个长文件名,其中必不可少的一个步骤,就是生成该长文件名对应的短文件名,且一个目录下所有的短文件名不能相同。
上述的长文件名的存储方案将导致以下问题一个目录下存放很多的文件名类似的长文件名,如DISC050301.jpg、DISC050302.jpg、DISC050303.jpg、DISC050304.jpg、…,这样的文件名有一个共性,就是名称大部分类似,只有小部分不同。
上述的几个文件名在FAT中会按照长文件名规范存储,其对应的短文件名为DISC05~1.jpg、DISC05~2.jpg、DISC05~3.jpg、DISC05~4.jpg、…。
而为了生成短文件名且要保证短文件名不重名,在创建新文件时,FAT要遍历当前目录下的所有文件的文件名,以此确保文件不重名,当目录下的文件非常多时,这个过程将耗费相当多的时间。

发明内容
本发明的目的是提供一种文件分配系统中的文件名生成方法及生成装置,加快文件名的生成速度,提高系统效率。
为了实现上述目的,本发明提供了一种文件分配系统中的文件名生成方法,包括数字确定步骤,利用当前目录下现有文件名的存储信息确定一第一数值,所述第一数值与当前目录下已有短文件名的数字部分的数值相比为唯一;
字符确定步骤,根据8.3命名规则,选择满足条件的至少一个字符作为短文件名的字符部分;短文件名确定步骤,将确定的所述字符和所述第一数值用字符“~”连接后作为新文件的短文件名的name字段的内容。
上述的方法,其中,所述字符为长文件名中最前面的一个或多个字符。
上述的方法,其中,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名已占用的条目数目,所述第一数值为创建新文件的当前目录下现有文件名已占用的条目数目加1后的结果。
上述的方法,其中,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名的数目,所述第一数值为创建新文件的当前目录下现有文件名的数目加1后的结果。
上述的方法,其中,所述当前目录下现有文件名的存储信息为当前扇区ID及该扇区已使用条目数目,所述第一数值为以当前扇区的ID作为开头,结合当前扇区已使用的条目数目所形成的数字加1后的数值,所述当前扇区已使用的条目数目为2位,不足两位则补0。
为了更好的实现上述目的,本发明还公开了一种文件分配系统中的文件名生成装置,包括数字确定模块,用于利用当前目录下现有文件名的存储信息确定一第一数值,所述第一数值与当前目录下已有短文件名的数字部分的数值相比为唯一;字符确定模块,用于根据8.3命名规则,选择满足条件的至少一个字符作为短文件名的字符部分;短文件名确定模块,用于将确定的所述字符和所述第一数值用字符“~”连接后作为新文件的短文件名的name字段的内容。
上述的装置,其中,所述字符为长文件名中最前面的一个或多个字符。
上述的装置,其中,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名已占用的条目数目,所述第一数值为创建新文件的当前目录下现有文件名已占用的条目数目加1后的结果。
上述的装置,其中,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名的数目,所述第一数值为创建新文件的当前目录下现有文件名的数目加1后的结果。
上述的装置,其中,所述当前目录下现有文件名的存储信息为当前扇区ID及该扇区已使用条目数目,所述第一数值为以当前扇区的ID作为开头,结合当前扇区已使用的条目数目所形成的数字加1后的数值,所述当前扇区已使用的条目数目为2位,不足两位则补0。
本发明直接通过当前目录下现有文件名的存储信息(如当前目录已使用条目数目、当前扇区已有文件名数目、当前目录最后条目所在扇区ID和该扇区已使用条目数目等)确定一唯一的数值作为新文件的短文件名的name字段数字部分,即可保证短文件名的唯一性,无需对逐一对比目录下的文件名,实现简单,快速。


图1为根目录区中条目的结构示意图;图2为扩展条目的结构示意图;图3为本发明的方法的流程示意图;图4为本发明的装置的结构示意图;图5为目录的簇链表的示意图。
具体实施例方式
本发明的文件分配系统中的文件名生成方法及生成装置,按照现有的“字符部分”+“~”+“数字部分”的短文件名生成规则,在创建新文件的短文件名时,根据当前目录下现有文件名的存储信息确定一数值作为短文件名的数字部分,使当前目录下短文件名的数字部分的数字均为唯一。
下面对本发明进行进一步详细的描述。
本发明创建的短文件名符合windows的命名规则,为“字符”+“~”+“部分”组成,长度为8个字符。
如图3所示,本发明的文件分配系统中的文件名生成方法包括数字确定步骤,获取当前目录下现有文件名的存储信息,并利用该存储信息为新文件的短文件名确定一数值,该确定的数值与当前目录下已有短文件名的数字部分的数值相比为唯一;字符确定步骤,根据8.3命名规则,选择满足条件的至少一个字符作为短文件名的字符部分;短文件名确定步骤,将字符部分步骤中确定的字符和数字确定步骤中确定的数字用字符“~”连接后作为短文件名的name字段的内容。
在此,字符由于需要满足8.3命名规则,因此,必须满足下面条件不能包括不能用于文件名的字符,如<、>、?、*等字符;字符的个数与数字确定步骤中确定的数字的位数之和应该小于7;因为短文件名中name字段为8个字符,其中包括字符“~”。
本发明的文件分配系统中的文件名生成装置如图4所示,包括数字确定模块,用于获取当前目录下现有文件的存储信息,并利用该存储信息为新文件的短文件名确定一数值,该确定的数值与当前目录下已有短文件名的数字部分的数值相比为唯一;字符确定模块,根据确定的数值,选择满足8.3命名规则的至少一个字符作为短文件名的字符部分;短文件名确定模块,用于将字符部分步骤中确定的字符和数字确定步骤中确定的数字用字符“~”连接后作为短文件名的name字段的内容。
<具体实施例1>
在具体实施例1中,该现有文件名的存储信息为创建新文件的当前目录下现有文件名已占用条目数目,为方便描述,在此命名为第一数目,则当前创建新文件的短文件名的name字段的数字部分的数值为第一数目加1后的结果。
数字确定步骤具体包括步骤11,创建新文件时,获取当前目录存储的首簇;该获取首簇的操作,对于FAT12和FAT16而言,可以直接从目录的条目中获取,而对于FAT32,则可以从FAT文件系统的参数区获取;步骤12,根据该当前目录的首簇找到文件分配表中该目录的簇链表;步骤13,遍历该文件分配表中该目录的簇链表后获取已存满条目的扇区数目和当前扇区的条目使用数目;步骤14,根据已存满条目的扇区数目和当前扇区的条目使用数目计算第一数目,并将该第一数目加1后作为当前创建的新文件的短文件名的name字段的数字部分。
根据上述的方法,能够获取当前目录占用的扇区个数,但无法知道最后一个扇区的使用状况,如最后一个扇区中到底是80%的条目已经被使用,还是只有20%的条目被使用,下面结合图5所示情况对步骤13进行具体说明如下。
步骤131,在对目录的簇链表进行遍历操作后,获取当前目录占用的扇区个数为6(扇区10、扇区11、扇区12、扇区16、扇区18和扇区19),已存满条目的扇区数目为5个(扇区10、扇区11、扇区12、扇区16和扇区18);步骤132,对于当前扇区(扇区19),由于无法知道已使用的条目的个数,但是,由于根目录区是所有条目的罗列,如果条目到了结束,即没有下一个有效的条目了,FAT通过将条目的byte0置零来表示条目的结束,因此,此时,进入到扇区19查找byte0被置零的条目相对于扇区起始的偏移,即可知道扇区19已使用条目的数目,如byte0被置零的条目相对于扇区起始位置的偏移量为192字节,则扇区19已使用条目的数目为6个(192/32)。
针对上述的具体情况,很容易知道目前已使用的条目数目为5*512/16+6,为166个,因此该文件的短文件名的name字段可为如下方式TEMP~166、A~166、B~166等。
采用本发明的上述方案,可以保证短文件名中的数字部分的数字为唯一的,不会出现重名现象,同时也不需要对比目录下的文件名,大大节省了生成文件名的速度,提高了系统效率。
本发明具体实施例1的文件分配系统中的数字确定模块如图6所示,包括首簇获取模块,在创建新文件时,用于获取当前目录存储的首簇;簇链表获取模块,用于根据该当前目录的首簇找到文件分配表中该目录的簇链表;已占用条目数目获取模块,用于遍历该文件分配表中该目录的簇链表后获取已存满条目的扇区数目和当前扇区的条目使用数目;数值计算模块,用于根据已存满条目的扇区数目和当前扇区的条目使用数目计算第一数目,并将该第一数目加1后作为当前创建的新文件的短文件名的name字段的数字部分。
<具体实施例2>
在具体实施例2中,该现有文件名的存储信息为创建新文件的文件名的所在扇区ID及该扇区已使用条目的信息,当前创建新文件的短文件名的name字段的数字部分的数值为当前扇区的ID作为开头,结合当前扇区已使用的条目数目(为2位,不足两位补0)所形成的数字加1后的数值,举例说明如下假设当前目录占用了第2扇区、第5扇区和第6扇区的前5个条目,则再创建新文件时,其短文件名name字段的数字部分为605。
通过上述的方法,利用扇区ID结合扇区条目ID也可形成一数值,该数值与当前目录下已有短文件名的数字部分的数值相比,必然为唯一。
具体实施例2的数字确定步骤具体包括步骤21,创建新文件时,获取当前目录存储的首簇;该获取首簇的操作,对于FAT12和FAT16而言,可以直接从目录的条目中获取,而对于FAT32,则可以从FAT文件系统的参数区获取;步骤22,根据该当前目录的首簇找到文件分配表中该目录的簇链表;步骤23,遍历该文件分配表中该目录的簇链表后获取当前扇区的扇区ID及当前扇区的条目使用数目;步骤24,将当前扇区的ID作为开头,结合当前扇区已使用的条目数目(为2位,不足两位补0)所形成的数字加1后得到的数值作为当前创建的新文件的短文件名的name字段的数字部分。
<具体实施例3>
在具体实施例3中,该现有文件名的存储信息为当前目录下现有文件名已占用的条目数目,为方便描述,在此命名为第一数目,则当前创建的新文件的短文件名的name字段的数字部分的数值为第一数目加1后的结果。
同时,FAT定义中通常要用两个FAT表,之所以如此,是要确保FAT表的安全性,一旦第一个FAT表被损坏,可以用第二个FAT表修复。实际情况表明第二个FAT表通常情况下意义不大,FAT本身是没有断电保护机制的,所以一旦物理性的断电,即使保存两个FAT表,也无济于事。
因此,在本发明的具体实施例3中,将第二个FAT表用于保存当前目录下现有文件名已占用的条目数目。
数字确定步骤具体包括
步骤31,文件名生成并保存后,在第二个FAT表中保存该目录下现有文件名已占用的条目数目;步骤32,创建新文件时,从第二个FAT表获取该目录下现有文件名已占用的条目数目;该获取操作可通过设置目录ID来实现;步骤33,将步骤22中获取的数目加1后作为当前创建的新文件的短文件名的数字部分。
在步骤31中,可以通过多种手段来实现1、保存每个目录下的每个文件名占用的条目数目,在步骤22中执行加法即可得到现有文件名已占用的条目数目;2、保存该目录下现有文件名占用条目数目的总和,每保存新文件的文件名,将该新文件文件名占用的条目数目加上前一个和值后作为新的和值保存。
本发明的具体实施例3中的数字确定模块具体包括已占用条目数目更新模块,用于文件名生成并保存后,在第二个FAT表中更新该目录下现有文件已占用的条目数目;已占用条目数目获取模块,用于在创建新文件时,从第二个FAT表获取该目录下现有文件名已占用的条目数目;数值计算模块,用于将已占用条目数目获取模块得到的数值加1后作为当前创建的新文件的短文件名的数字部分。
<具体实施例4>
在具体实施例4中,现有文件名的存储信息为创建新文件的当前目录下现有文件名的数目,为方便描述,在此命名为第二数目,则当前创建的新文件的短文件名的name字段的数字部分的数值为第二数目加1后的结果。
FAT定义中通常要用两个FAT表,之所以如此,是要确保FAT表的安全性,一旦第一个FAT表被损坏,可以用第二个FAT表修复。实际情况表明第二个FAT表通常情况下意义不大,FAT本身是没有断电保护机制的,所以一旦物理性的断电,即使保存两个FAT表,也无济于事。
因此,在本发明的具体实施例3中,将第二个FAT表用于保存创建新文件的当前目录下现有文件名的数目。
数字确定步骤具体包括
步骤41,文件名生成并保存后,在第二个FAT表中更新该目录下现有文件名的数目;步骤42,创建新文件时,从第二个FAT表获取该目录下现有文件名的数目;该获取操作可通过设置目录ID来实现;步骤43,将步骤42中获取的数目加1后作为当前创建的新文件的短文件名的name字段的数字部分。
本发明的具体实施例4中的数字确定模块具体包括保存文件数目更新模块,用于文件名生成并保存后,在第二个FAT表中更新该目录下现有文件名的数目;现有文件名数目获取模块,用于在创建新文件时,从第二个FAT表获取该目录下现有文件名的数目;数值计算模块,用于将现有文件名数目获取模块得到的数值加1后作为当前创建的新文件的短文件名的name字段的数字部分。
上述的具体实施例3和具体实施例4均通过第二个FAT表保存现有文件名的存储信息,当然也可通过在FAT文件系统中创建另外一个表来保存现有文件名的存储信息。
通过上述的4个实施例可以发现,本发明的方法和装置,在生成新文件的文件名时,无需对逐一对比目录下的文件名,只需通过当前目录下现有文件名的存储信息确定一唯一的数值作为新文件的短文件名的数字部分,即可保证短文件名的唯一性,实现简单,快速。
从上述的描述可知,本发明中,生成短文件名时,短文件名的字符部分在满足8.3生成规则的情况下可以任意选取,然而,为了尽可能保证文件的长文件名和短文件名的对应性,该字符确定步骤中选择的字符可以是文件的长文件名中的一部分,当然最好是长文件名中最前面的一个或多个字符。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种文件分配系统中的文件名生成方法,其特征在于,包括数字确定步骤,利用当前目录下现有文件名的存储信息确定一第一数值,所述第一数值与当前目录下已有短文件名的数字部分的数值相比为唯一;字符确定步骤,根据8.3命名规则,选择满足条件的至少一个字符作为短文件名的字符部分;短文件名确定步骤,将确定的所述字符部分和所述第一数值用字符“~”连接后作为新文件的短文件名的name字段的内容。
2.根据权利要求1所述的方法,其特征在于,所述字符为长文件名中最前面的一个或多个字符。
3.根据权利要求1所述的方法,其特征在于,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名已占用的条目数目,所述第一数值为创建新文件的当前目录下现有文件名已占用的条目数目加1后的结果。
4.根据权利要求3所述的方法,其特征在于,所述数字确定步骤具体包括步骤11,创建新文件时,获取当前目录存储的首簇;步骤12,根据该当前目录的首簇找到文件分配表中该目录的簇链表;步骤13,遍历该文件分配表中该目录的簇链表后获取已存满条目的扇区数目和当前扇区的条目使用数目;步骤14,根据已存满条目的扇区数目和当前扇区的条目使用数目计算当前目录下现有文件名已占用的条目数目,将所述当前目录下现有文件名已占用的条目数目加1得到所述第一数值。
5.根据权利要求3所述的方法,其特征在于,所述数字确定步骤具体包括步骤21,文件名生成保存后,保存当前目录现有文件名已占用条目数目;步骤22,创建新文件时,获取当前目录现有文件名已占用条目数目;步骤23,将步骤22中获取的数目加1后得到所述第一数值。
6.根据权利要求5所述的方法,其特征在于,所述步骤21中,所述当前目录现有文件名已占用条目数目保存于第二FAT表。
7.根据权利要求1所述的方法,其特征在于,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名的数目,所述第一数值为创建新文件的当前目录下现有文件名的数目加1后的结果。
8.根据权利要求7所述的方法,其特征在于,所述数字确定步骤具体包括步骤31,文件名生成保存后,保存当前目录下现有文件名的数目;步骤32,创建新文件时,获取当前目录下现有文件名的数目;步骤33,将步骤32中获取的数目加1后得到所述第一数值。
9.根据权利要求1所述的方法,其特征在于,所述当前目录下现有文件名的存储信息为当前扇区ID及该扇区已使用条目数目,所述第一数值为以当前扇区的ID作为开头,结合当前扇区已使用的条目数目所形成的数字加1后的数值,所述当前扇区已使用的条目数目为2位,不足两位则补0。
10.一种文件分配系统中的文件名生成装置,其特征在于,包括数字确定模块,用于利用当前目录下现有文件名的存储信息确定一第一数值,所述第一数值与当前目录下已有短文件名的数字部分的数值相比为唯一;字符确定模块,用于根据8.3命名规则,选择满足条件的至少一个字符作为短文件名的字符部分;短文件名确定模块,用于将确定的所述字符部分和所述第一数值用字符“~”连接后作为新文件的短文件名的name字段的内容。
11.根据权利要求10所述的装置,其特征在于,所述字符为长文件名中最前面的一个或多个字符。
12.根据权利要求10所述的装置,其特征在于,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名已占用的条目数目,所述第一数值为创建新文件的当前目录下现有文件名已占用的条目数目加1后的结果。
13.根据权利要求10所述的装置,其特征在于,所述当前目录下现有文件名的存储信息为创建新文件的当前目录下现有文件名的数目,所述第一数值为创建新文件的当前目录下现有文件名的数目加1后的结果。
14.根据权利要求10所述的装置,其特征在于,所述当前目录下现有文件名的存储信息为当前扇区ID及该扇区已使用条目数目,所述第一数值为以当前扇区的ID作为开头,结合当前扇区已使用的条目数目所形成的数字加1后的数值,所述当前扇区已使用的条目数目为2位,不足两位则补0。
全文摘要
本发明公开了一种文件分配系统中的文件名生成方法及生成装置,其中,该方法包括数字确定步骤,利用当前目录下现有文件名的存储信息确定一第一数值,所述第一数值与当前目录下已有短文件名的数字部分的数值相比为唯一;字符确定步骤,根据8.3命名规则,选择满足条件的至少一个字符作为短文件名的字符部分;短文件名确定步骤,将确定的所述字符和所述第一数值用字符“~”连接后作为新文件的短文件名的name字段的内容。本发明直接通过当前目录下现有文件名的存储信息确定一唯一的数值作为新文件的短文件名的name字段数字部分,即可保证短文件名的唯一性,无需对逐一对比目录下的文件名,实现了简单,快速的文件名生成。
文档编号G06F17/30GK101051320SQ20071009912
公开日2007年10月10日 申请日期2007年5月11日 优先权日2007年5月11日
发明者孙丰强 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1