專利名稱:文件分配系統(tǒng)中的文件名生成方法及生成裝置的制作方法
技術領域:
本發(fā)明涉及FAT(File Allocation Table,文件分配表)系統(tǒng),特別是文件分配系統(tǒng)中的文件名生成方法及生成裝置。
背景技術:
FAT文件系統(tǒng)是微軟定義的一種管理磁盤數(shù)據(jù)空間的文件系統(tǒng),通過FAT表來管理整個磁盤空間,目前包括FAT12、FAT16和FAT32這3種文件系統(tǒng),來滿足不同存儲空間范圍的空間管理,F(xiàn)AT12、FAT16和FAT32這3種文件系統(tǒng)中FAT表中的基本單位分別為12個bit,16個bit或32個bit。
在FAT文件系統(tǒng)中,定義了一個根目錄區(qū)(Root Directory Region),用于存儲根目錄下的數(shù)據(jù)項。
在FAT文件系統(tǒng)中,根目錄區(qū)的基本存儲單位為條目(entry),其結構如圖1所示,包括以下字段Name(文件或目錄的名字)、Ext(擴展名)、Attr(屬性)、Case、Time_ms(時間)、Create_time(創(chuàng)建時間)、Create_date(創(chuàng)建日期)、Accessdate(最近一次訪問日期)、Start cluster HI(文件或目錄對應數(shù)據(jù)區(qū)的起始簇的高位)、Modify time(最近一次修改時間)、Modify date(最近一次修改日期)、Startcluster LO(文件或目錄對應數(shù)據(jù)區(qū)的起始簇的低位)及File size(文件大小)。
每一個文件都對應一個entry項,一個entry項占32個byte,根目錄區(qū)就是所有entry項的羅列,如果entry到了結束,即沒有下一個有效的entry了,F(xiàn)AT通過將entry的byte0置零來表示entry的結束。
從目錄區(qū)的entry結構可發(fā)現(xiàn),傳統(tǒng)的FAT在文件、目錄名字的長度上是有限制的,名字為8個字符,擴展名為3個字符,即常說的8.3命名規(guī)則。在本發(fā)明中為方便描述,將8.3命名規(guī)則對應的文件名命名為短文件名。
FAT為了實現(xiàn)對名字超過8個字符的文件名的支持,通過擴展了entry的定義來支持,在本發(fā)明中,為方便描述,將其命名為長文件名。
FAT通過在常規(guī)文件entry的前面依次設置擴展entry項來存儲長文件名,擴展entry如圖2所示。
短文件名的構成如下“字符部分”+“~”+“數(shù)字部分”+“.”+“后綴部分”短文件名通常是長文件名的“前幾個字符”+“~”+“數(shù)字”+“.”+“后綴部分”構成,如“The quick brown fox.exe”對應的短文件名為“Thequi~1.fox”,如果又有一個名稱類似的長文件名,如“The quick brownfoxl.exe”,則相應的短文件名為“Thequi~2.fox”。
上述的文件名處理方案中,長文件名采用Unicode編碼,而短文件名采用當前系統(tǒng)編碼,如中文平臺的GB碼,韓文編碼等。這樣就涉及Unicode編碼和本地編碼兩套編碼,對于某些存儲空間有限的系統(tǒng)來講,多套編碼必然增加了存儲的壓力,增加了開銷。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種文件分配系統(tǒng)中的文件名生成方法及生成裝置,減少編碼的數(shù)量,進而減少資源開銷。
為了實現(xiàn)上述目的,本發(fā)明提供了一種文件分配系統(tǒng)中的文件名生成方法,其中,包括步驟31,按照文件分配系統(tǒng)標準,采用Unicode編碼生成長文件名;步驟32,判斷生成的文件名是否超過8個字符,如果是,進入步驟33,否則進入步驟34;步驟33,從長文件名的Unicode編碼中選取部分Unicode編碼,進行兼容預處理后作為短文件名的字符部分,并確定短文件名數(shù)字部分后,生成對應的短文件名的name字段;步驟34,直接將長文件名的Unicode編碼作為短文件名name字段的內(nèi)容,生成對應的短文件名。
上述的方法,其中,該兼容預處理操作具體為將選取的部分Unicode編碼中的0字符轉換為0X30。
上述的方法,其中,所述步驟33中選取的部分Unicode編碼為長文件名Unicode編碼中最前面的一個或多個。
上述的方法,其中,所述步驟33中確定短文件名數(shù)字部分具體包括
步驟A,選擇一數(shù)字,與選擇的Unicode編碼結合生成一臨時短文件名;步驟B,通過遍歷當前目錄下的所有文件的文件名,判斷該臨時短文件名是否與當前目錄下的文件的文件名相同,如果是,返回步驟A,否則進入步驟C;步驟C,將步驟A中選擇的數(shù)字作為短文件名的數(shù)字部分。
上述的方法,其中,所述步驟33中確定短文件名數(shù)字部分具體為獲取當前目錄下現(xiàn)有文件名的存儲信息,并利用該存儲信息確定一第一數(shù)值作為短文件名的數(shù)字部分,該確定的第一數(shù)值與當前目錄下已有短文件名的數(shù)字部分的數(shù)值相比為唯一。
上述的方法,其中,所述當前目錄下現(xiàn)有文件名的存儲信息為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名已占用的條目數(shù)目,所述第一數(shù)值為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名已占用的條目數(shù)目加1后的結果。
上述的方法,其中,所述當前目錄下現(xiàn)有文件名的存儲信息為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名的數(shù)目,所述第一數(shù)值為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名的數(shù)目加1后的結果。
上述的方法,其中,所述當前目錄下現(xiàn)有文件名的存儲信息為當前扇區(qū)ID及該扇區(qū)已使用條目數(shù)目,所述第一數(shù)值為以當前扇區(qū)的ID作為開頭,結合當前扇區(qū)已使用的條目數(shù)目所形成的數(shù)字加1后的數(shù)值,所述當前扇區(qū)已使用的條目數(shù)目為2位,不足兩位則補0。
為了更好的實現(xiàn)上述目的,本發(fā)明還提供了一種文件分配系統(tǒng)中的文件名生成裝置,其中,包括長文件名生成模塊,用于按照文件分配系統(tǒng)標準,采用Unicode編碼生成長文件名;判斷模塊,用于判斷生成的文件名是否超過8個字符,如果是,由第一短文件名生成模塊進行處理,否則由第二短文件名生成模塊進行處理;第一短文件名生成模塊,用于從長文件名的Unicode編碼中選取部分Unicode編碼,進行兼容預處理后作為短文件名的字符部分,并確定短文件名數(shù)字部分后,生成對應的短文件名的name字段;第二短文件名生成模塊,用于直接將長文件名的Unicode編碼作為短文件名name字段的內(nèi)容,生成對應的短文件名。
上述的裝置,其中,該兼容預處理操作具體為將選取的部分Unicode編碼中的0字符轉換為0X30。
上述的裝置,其中,所述第一短文件名生成模塊選取的部分Unicode編碼為長文件名Unicode編碼中最前面的一個或多個。
上述的裝置,其中,所述短文件名數(shù)字部分為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名已占用的條目數(shù)目加1后的結果。
上述的裝置,其中,所述短文件名數(shù)字部分為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名的數(shù)目加1后的結果。
上述的裝置,其中,所述短文件名數(shù)字部分為以當前扇區(qū)的ID作為開頭,結合當前扇區(qū)已使用的條目數(shù)目所形成的數(shù)字加1后的數(shù)值,所述當前扇區(qū)已使用的條目數(shù)目為2位,不足兩位則補0。
本發(fā)明的方法和裝置,通過將短文件名中的字符采用Unicode編碼來處理,節(jié)省了一套編碼,因此減少了系統(tǒng)的資源開銷;同時,對于短文件名中的數(shù)值,本發(fā)明進一步結合當前目錄下現(xiàn)有文件名的存儲信息,并利用該存儲信息為新文件的短文件名確定一數(shù)值,該確定的數(shù)值與當前目錄下已有短文件名的數(shù)字部分的數(shù)值相比為唯一,加快了文件名的生成速度。
圖1為根目錄區(qū)中條目的結構示意圖;圖2為擴展條目的結構示意圖;圖3為本發(fā)明的方法的流程示意圖;圖4為本發(fā)明的裝置的結構示意圖;具體實施方式
本發(fā)明的文件分配系統(tǒng)中的文件名生成方法及生成裝置,對于文件分配系統(tǒng)中的長文件名和短文件名統(tǒng)一使用Unicode編碼,減少了系統(tǒng)的資源開銷。
本發(fā)明的文件分配系統(tǒng)中的文件名生成方法如圖3所示,包括如下步驟長文件名生成步驟31,按照文件分配系統(tǒng)標準,采用Unicode編碼生成長文件名;判斷步驟32,判斷生成的文件名是否超過8個字符,如果是,進入步驟33,否則進入步驟34;第一短文件名生成步驟33,從長文件名的Unicode編碼中選取部分Unicode編碼,進行兼容預處理后作為短文件名的字符部分,并確定短文件名數(shù)字部分后,生成對應的短文件名的name字段;第二短文件名生成步驟34,直接將長文件名的Unicode編碼作為短文件名name字段的內(nèi)容,生成對應的短文件名。
本發(fā)明的文件分配系統(tǒng)中的文件名生成裝置如圖4所示,包括長文件名生成模塊,用于按照文件分配系統(tǒng)標準,采用Unicode編碼生成長文件名;判斷模塊,用于判斷生成的文件名是否超過8個字符,如果是,由第一短文件名生成模塊進行處理,否則由第二短文件名生成模塊進行處理;第一短文件名生成模塊,用于從長文件名的Unicode編碼中選取部分Unicode編碼,進行兼容預處理后作為短文件名的字符部分,并確定短文件名數(shù)字部分后,生成對應的短文件名的name字段;第二短文件名生成模塊,用于直接將長文件名的Unicode編碼作為短文件名name字段的內(nèi)容,生成對應的短文件名。
然而,為了盡可能保證文件的長文件名和短文件名的對應性,步驟33中選擇的Unicode編碼為長文件名Unicode編碼中最前面的一個或多個。
從上述的描述可以看出,在處理過程中,需要對選取的部分Unicode編碼進行兼容預處理,該兼容預處理操作具體為將選取的部分Unicode編碼中的0字符轉換為0X30。因為長文件名為英文字母時,因為字母的Unicode中會包含0字符,這樣windows不兼容,所以為了與windows兼容,需要將該Unicode編碼中的0字符轉換為0X30。
從上述的描述可以看出,在長文件名超過8個字符時,利用本發(fā)明的方法和裝置生成對應的短文件名時,需要獲取一數(shù)字,作為短文件名的數(shù)字部分,在此,該確定短文件名數(shù)字部分的動作可以通過以下方法實現(xiàn)遍歷當前目錄下的所有文件的文件名后確定一數(shù)字,確保文件不重名,具體包括步驟A,選擇一數(shù)字,與選擇的Unicode編碼結合生成一臨時短文件名;步驟B,通過遍歷當前目錄下的所有文件的文件名,判斷該臨時短文件名是否與當前目錄下的文件的文件名相同,如果是,返回步驟A,否則進入步驟C;步驟C,將步驟A中選擇的數(shù)字作為短文件名的數(shù)字部分。
然而上述的確定數(shù)字的方案存在以下問題當一個目錄下文件很多時,為了生成短文件名,需要遍歷當前目錄下的所有文件的文件名,以此確保文件不重名,這個過程將耗費相當多的時間。
因此,本發(fā)明進一步提出一個確定數(shù)字部分的數(shù)字的方法,在減少編碼的情況下進一步加快文件名生成的速度。
本發(fā)明通過獲取當前目錄下現(xiàn)有文件名的存儲信息,并利用該存儲信息為新文件的短文件名確定一數(shù)值,該確定的數(shù)值與當前目錄下已有短文件名的數(shù)字部分的數(shù)值相比為唯一。
下面以不同的存儲信息為例對數(shù)值的確定進行進一步說明。
該現(xiàn)有文件名的存儲信息為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名已占用條目數(shù)目,為方便描述,在此命名為第一數(shù)目,則當前創(chuàng)建新文件的短文件名的name字段的數(shù)字部分的數(shù)值為第一數(shù)目加1后的結果。
其實現(xiàn)包括如下步驟獲取當前目錄存儲的首簇;根據(jù)該當前目錄的首簇找到文件分配表中該目錄的簇鏈表;遍歷該文件分配表中該目錄的簇鏈表后獲取已存滿條目的扇區(qū)數(shù)目和當前扇區(qū)的條目使用數(shù)目;根據(jù)已存滿條目的扇區(qū)數(shù)目和當前扇區(qū)的條目使用數(shù)目計算第一數(shù)目,并將該第一數(shù)目加1后作為當前創(chuàng)建的新文件的短文件名的name字段的數(shù)字部分。
同時,該現(xiàn)有文件名的存儲信息也可以是創(chuàng)建新文件的文件名的所在扇區(qū)ID及該扇區(qū)已使用條目的信息,當前創(chuàng)建新文件的短文件名的name字段的數(shù)字部分的數(shù)值為當前扇區(qū)的ID作為開頭,結合當前扇區(qū)已使用的條目數(shù)目(為2位,不足兩位補0)所形成的數(shù)字加1后的數(shù)值,舉例說明如下假設當前目錄占用了第2扇區(qū)、第5扇區(qū)和第6扇區(qū)的前5個條目,則再創(chuàng)建新文件時,其短文件名name字段的數(shù)字部分為605。
其實現(xiàn)包括如下步驟獲取當前目錄存儲的首簇;根據(jù)該當前目錄的首簇找到文件分配表中該目錄的簇鏈表;遍歷該文件分配表中該目錄的簇鏈表后當前扇區(qū)的扇區(qū)ID及當前扇區(qū)的條目使用數(shù)目;將當前扇區(qū)的ID作為開頭,結合當前扇區(qū)已使用的條目數(shù)目(為2位,不足兩位補0)所形成的數(shù)字加1后得到的數(shù)值作為當前創(chuàng)建的新文件的短文件名的name字段的數(shù)字部分。
通過上述的方法,利用扇區(qū)ID結合扇區(qū)條目ID也可形成一數(shù)值,該數(shù)值與當前目錄下已有短文件名的數(shù)字部分的數(shù)值相比,必然為唯一。
同時,該現(xiàn)有文件名的存儲信息還可以是當前目錄下現(xiàn)有文件名的數(shù)目,則當前創(chuàng)建的新文件的短文件名的name字段的數(shù)字部分的數(shù)值為當前目錄下現(xiàn)有文件名的數(shù)目加1后的結果。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
權利要求
1.一種文件分配系統(tǒng)中的文件名生成方法,其特征在于,包括步驟31,按照文件分配系統(tǒng)標準,采用Unicode編碼生成長文件名;步驟32,判斷生成的文件名是否超過8個字符,如果是,進入步驟33,否則進入步驟34;步驟33,從長文件名的Unicode編碼中選取部分Unicode編碼,進行兼容預處理后作為短文件名的字符部分,并確定短文件名數(shù)字部分后,生成對應的短文件名的name字段;步驟34,直接將長文件名的Unicode編碼作為短文件名name字段的內(nèi)容,生成對應的短文件名。
2.根據(jù)權利要求1所述的方法,其特征在于,該兼容預處理操作具體為將選取的部分Unicode編碼中的0字符轉換為0X30。
3.根據(jù)權利要求2所述的方法,其特征在于,所述步驟33中選取的部分Unicode編碼為長文件名Unicode編碼中最前面的一個或多個。
4.根據(jù)權利要求1或2所述的方法,其特征在于,所述步驟33中確定短文件名數(shù)字部分具體包括步驟A,選擇一數(shù)字,與選擇的Unicode編碼結合生成一臨時短文件名;步驟B,通過遍歷當前目錄下的所有文件的文件名,判斷臨時短文件名是否與當前目錄下的文件的文件名相同,如果是,返回步驟A,否則進入步驟C;步驟C,將步驟A中選擇的數(shù)字作為短文件名的數(shù)字部分。
5.根據(jù)權利要求1或2所述的方法,其特征在于,所述步驟33中確定短文件名數(shù)字部分具體為獲取當前目錄下現(xiàn)有文件名的存儲信息,并利用該存儲信息確定一第一數(shù)值作為短文件名的數(shù)字部分,該確定的第一數(shù)值與當前目錄下已有短文件名的數(shù)字部分的數(shù)值相比為唯一。
6.根據(jù)權利要求5所述的方法,其特征在于,所述當前目錄下現(xiàn)有文件名的存儲信息為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名已占用的條目數(shù)目,所述第一數(shù)值為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名已占用的條目數(shù)目加1后的結果。
7.根據(jù)權利要求5所述的方法,其特征在于,所述當前目錄下現(xiàn)有文件名的存儲信息為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名的數(shù)目,所述第一數(shù)值為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名的數(shù)目加1后的結果。
8.根據(jù)權利要求5所述的方法,其特征在于,所述當前目錄下現(xiàn)有文件名的存儲信息為當前扇區(qū)ID及該扇區(qū)已使用條目數(shù)目,所述第一數(shù)值為以當前扇區(qū)的ID作為開頭,結合當前扇區(qū)已使用的條目數(shù)目所形成的數(shù)字加1后的數(shù)值,所述當前扇區(qū)已使用的條目數(shù)目為2位,不足兩位則補0。
9.一種文件分配系統(tǒng)中的文件名生成裝置,其特征在于,包括長文件名生成模塊,用于按照文件分配系統(tǒng)標準,采用Unicode編碼生成長文件名;判斷模塊,用于判斷生成的文件名是否超過8個字符,如果是,由第一短文件名生成模塊進行處理,否則由第二短文件名生成模塊進行處理;第一短文件名生成模塊,用于從長文件名的Unicode編碼中選取部分Unicode編碼,進行兼容預處理后作為短文件名的字符部分,并確定短文件名數(shù)字部分后,生成對應的短文件名的name字段;第二短文件名生成模塊,用于直接將長文件名的Unicode編碼作為短文件名name字段的內(nèi)容,生成對應的短文件名。
10.根據(jù)權利要求9所述的裝置,其特征在于,該兼容預處理操作具體為將選取的部分Unicode編碼中的0字符轉換為0X30。
11.根據(jù)權利要求10所述的裝置,其特征在于,所述第一短文件名生成模塊選取的部分Unicode編碼為長文件名Unicode編碼中最前面的一個或多個。
12.根據(jù)權利要求9或10所述的裝置,其特征在于,所述短文件名數(shù)字部分為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名已占用的條目數(shù)目加1后的結果。
13.根據(jù)權利要求9或10所述的裝置,其特征在于,所述短文件名數(shù)字部分為創(chuàng)建新文件的當前目錄下現(xiàn)有文件名的數(shù)目加1后的結果。
14.根據(jù)權利要求9或10所述的裝置,其特征在于,所述短文件名數(shù)字部分為以當前扇區(qū)ID為開頭,結合當前扇區(qū)已使用的條目數(shù)目所形成的數(shù)字加1后的數(shù)值,所述當前扇區(qū)已使用的條目數(shù)目為2位,不足兩位則補0。
全文摘要
本發(fā)明提供了一種文件分配系統(tǒng)中的文件名生成方法和裝置,其中該方法包括步驟31,按照文件分配系統(tǒng)標準,采用Unicode編碼生成長文件名;步驟32,判斷生成的文件名是否超過8個字符,如果是,進入步驟33,否則進入步驟34;步驟33,從長文件名的Unicode編碼中選取部分Unicode編碼,進行兼容預處理后作為短文件名的字符部分,并確定短文件名數(shù)字部分后,生成對應的短文件名的name字段;步驟34,直接將長文件名的Unicode編碼作為短文件名name字段的內(nèi)容,生成對應的短文件名。本發(fā)明的方法和裝置節(jié)省了一套編碼,減少了系統(tǒng)的資源開銷。
文檔編號G06F17/22GK101051319SQ20071009912
公開日2007年10月10日 申請日期2007年5月11日 優(yōu)先權日2007年5月11日
發(fā)明者孫豐強 申請人:北京中星微電子有限公司