專利名稱:Fat文件系統(tǒng)中文件分割的方法及其裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機原理領(lǐng)域,具體涉及FAT文件系統(tǒng)中一種文件分割的方法,以及使用這種方法的裝置。
背景技術(shù):
FAT文件系統(tǒng)的文件存儲原理是,當把一部分磁盤空間格式化為FAT文件系統(tǒng)時,F(xiàn)AT文件系統(tǒng)就將這個分區(qū)當成整塊可分配的區(qū)域進行規(guī)劃,以便于數(shù)據(jù)的存儲。
FAT是Microsoft推出的文件系統(tǒng),具有高度兼容性,目前仍然廣泛應(yīng)用于個人電腦尤其是移動存儲設(shè)備中,F(xiàn)AT簡單來講由5部分組成,分別是MBR、DBR、FAT、目錄區(qū)、數(shù)據(jù)區(qū)。其中,引導(dǎo)扇區(qū)(DBR)之后沒有留有任何保留扇區(qū),其后緊隨的便是FAT表。FAT表用來記錄磁盤數(shù)據(jù)區(qū)簇鏈結(jié)構(gòu)的。FAT將磁盤空間按一定數(shù)目的扇區(qū)為單位進行劃分,這樣的單位稱為簇。通常情況下,每扇區(qū)512字節(jié)的原則是不變的。簇的大小一般是2n(n為整數(shù))個扇區(qū)的大小,實際中通常不超過32K。
格式化FAT分區(qū)時,格式化程序根據(jù)分區(qū)的大小確定簇的大小,然后根據(jù)保留扇區(qū)的數(shù)目、根目錄的扇區(qū)數(shù)目、數(shù)據(jù)區(qū)可分的簇數(shù)與FAT表本身所占空間來確定FAT表所需的扇區(qū)數(shù)目,然后將計算后的結(jié)果寫入DBR的相關(guān)位置。
FAT文件系統(tǒng)之所以有12,16,32不同的版本之分,其根本在于FAT表用來記錄任意一簇鏈接的二進制位數(shù)。以FAT16為例,每一簇在FAT表中占據(jù)2字節(jié)(二進制16位)。
FAT表實際上是一個數(shù)據(jù)表,以2個字節(jié)為單位,這個單位稱為FAT表項,通常情況其第1、2個表項用作介質(zhì)描述。從第三個記錄項開始記錄除根目錄外的其他文件及文件夾的簇鏈情況。
3種FAT文件系統(tǒng)結(jié)構(gòu)中,簇的取值意義如下
一段FAT16中的FAT表如圖1所示。其中,F(xiàn)AT表以″F8 FF FF FF″開頭,此2字節(jié)為介質(zhì)描述單元,并不參與FAT表簇鏈關(guān)系。
相對偏移0x4~0x5偏移為第2簇(順序上第1簇),此處為FF,表示存儲在第2簇上的文件(目錄)是個小文件,該文件只占用1個簇便結(jié)束了。
第3簇中存放的數(shù)據(jù)是0x0005,這是一個文件或文件夾的首簇。其內(nèi)容為第5簇,就是說接下來的簇位于第5簇。FAT表指引我們到達FAT表的第5簇指向,上面寫的數(shù)據(jù)是″FF FF″,即此文件已至尾簇。
第4簇中存放的數(shù)據(jù)是0x0006,這又是一個文件或文件夾的首簇。其內(nèi)容為第6簇,就是說接下來的簇位于第6簇。FAT表指引我們到達FAT表的第6簇指向,上面寫的數(shù)據(jù)是0x0007,就是說接下來的簇位于第7簇。FAT表指引我們到達FAT表的第7簇指向……直到根據(jù)FAT鏈讀取到扇區(qū)相對偏移0x1A~0x1B,也就是第13簇,上面寫的數(shù)據(jù)是0x000E,也就是指向第14簇。14簇的內(nèi)容為″FF FF″,即此文件已至尾簇。
FAT文件系統(tǒng)中,當用戶需要分割文件時,或操作系統(tǒng)根據(jù)需要把大文件分割成多個小文件時(盡管有時用戶并不知道文件是經(jīng)過分割的),現(xiàn)有技術(shù)的操作是,從FAT文件系統(tǒng)的定義可以看出,常規(guī)的文件分割方法需要把文件數(shù)據(jù)從頭至尾一次讀出并寫入寄存器,然后在另一份存儲空間內(nèi)創(chuàng)建子文件,把之前讀出的數(shù)據(jù)寫入相應(yīng)的子文件空間中。這樣的做法的缺點是,一是有不需要的讀寫操作,它必須讀取原文件的所有數(shù)據(jù),然后再重新寫入子文件;二是占用的寄存器多,因為文件的分割過程中需要兩倍于文件體積的存儲空間,一般用于寄存文件數(shù)據(jù),另一半用于創(chuàng)建新的子文件。
例如,如圖2所示,一個現(xiàn)有的文件A,F(xiàn)AT表為它指定的簇鏈表指明了這個文件是從簇8開始,簇85結(jié)束(即簇85的值為FF FF)。雖然這是一個完整的文件,可由于FAT文件系統(tǒng)中文件的鏈式存放結(jié)構(gòu),因此它實際上不是連續(xù)存放的。假設(shè)系統(tǒng)需要把這個文件分割為8個子文件,常規(guī)文件分割方法會將文件A的數(shù)據(jù)完全讀入寄存器(buffer),然后在另一個存儲空間內(nèi)創(chuàng)建8個子文件,依次寫入數(shù)據(jù);保存并關(guān)閉8個子文件,最后刪除原始文件A,清空文件A所占用的寄存器。顯然這樣需要寄存器空間用于存儲文件A;還額外占用存儲空間用于生成新的子文件,還需要必不可少的文件讀寫操作。
發(fā)明內(nèi)容
(一)要解決的技術(shù)問題本發(fā)明的目的是要克服目前現(xiàn)有技術(shù)的缺陷,提出一種快速、有效、可以減少讀寫操作、節(jié)約存儲空間的FAT文件系統(tǒng)中文件分割的方法,以及可以使用這種方法的裝置。
(二)技術(shù)方案本發(fā)明提出一種FAT文件系統(tǒng)中文件分割的方法,包括以下步驟(1)獲取文件的簇鏈表;(2)把原始文件的簇鏈表劃分為多個子鏈表;(3)創(chuàng)建新的子文件表項結(jié)構(gòu);(4)刪除原始文件的表項結(jié)構(gòu)。
上述的FAT文件系統(tǒng)中文件分割的方法,其中步驟(3)創(chuàng)建的表項結(jié)構(gòu)中包含以下信息文件名字、屬性、創(chuàng)建時間、訪問時間、修改時間、文件大小、首簇值。
上述的FAT文件系統(tǒng)中文件分割的方法,一種優(yōu)選的方案是步驟(2)中,依據(jù)子文件的尺寸,把原始文件的簇鏈表劃分為多個子鏈表。
本發(fā)明還提出一種裝置,該裝置使用了本發(fā)明提出的FAT文件系統(tǒng)差錯處理方法,該裝置包括CPU和存儲器,其中,存儲器內(nèi)包括一個FAT文件系統(tǒng),當通過這個文件系統(tǒng)對文件進行分割時,將待分割的文件的簇鏈表劃分為多個子鏈表,然后創(chuàng)建新的子文件表項結(jié)構(gòu),再刪除原始文件的表項結(jié)構(gòu),完成文件分割過程。
上述的裝置,一種優(yōu)選的方案是還包括USB模塊,用于將該裝置與計算機相連。
(三)有益效果采用本發(fā)明提出的FAT文件系統(tǒng)中文件分割的方法實現(xiàn)文件分割,由于沒有文件數(shù)據(jù)的讀寫操作,因此可以節(jié)省操作時間,節(jié)約了存儲空間。對于大文件或速度較慢的小型處理器,有非常明顯的效果。
圖1為一段FAT表的值;圖2為現(xiàn)有技術(shù)中文件的示意圖;圖3為使用本發(fā)明提出的方法對文件進行分割后的文件示意圖;
圖4為本發(fā)明的實施例的模塊圖。
其中,1、揚聲器;2、MCU系統(tǒng)。
具體實施例方式
本發(fā)明提出的FAT文件系統(tǒng)中文件分割的方法結(jié)合附圖和實施例說明如下。以下實施方式僅用于說明本發(fā)明,而并非對本發(fā)明的限制,有關(guān)技術(shù)領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護范圍應(yīng)由各項權(quán)利要求限定。
參照圖4,本實施例中,整個FAT文件系統(tǒng)放置在一片音頻處理芯片中,這個音頻處理芯片包括CPU和存儲器部分,其中CPU和存儲器之間的數(shù)據(jù)傳輸采用現(xiàn)有技術(shù)中常用的DMA(直接存儲器存取)傳輸方式。具體在說,在這片音頻芯片的存儲器中設(shè)置了一個FAT文件系統(tǒng)。由于這個FAT文件系統(tǒng),因此通過它可以完成對外部存儲介質(zhì)的管理,例如通過它讀取外部的SD、MMC、NandFlash記憶卡中的數(shù)據(jù)。這種通過一個文件系統(tǒng)進行對外部存儲介質(zhì)的管理屬于現(xiàn)有技術(shù),類似于在通用計算機上通過操作系統(tǒng)完成對USB存儲器的管理一樣,在此不作贅述。
在這個MCU系統(tǒng)(MCU system)中,采用51C型CPU作為中央處理器,通過DMA方式與存儲器之間通信。本裝置采用現(xiàn)有技術(shù)中常用的音頻處理模塊,支持midi、mp3、wave多種格式的音樂播放功能,也支持midi+wave、midi+mp3的播放。這些音樂數(shù)據(jù)會通過音頻混音(Audio Mix)模塊,然后輸出到EQ(智能)模塊、3D模塊,然后輸出到揚聲器。
這個MCU系統(tǒng)中還包括USB模塊,這個音頻處理芯片可以通過該模塊與通用計算機(PC)之間進行數(shù)據(jù)傳輸。
對于存儲在存儲器中的文件系統(tǒng)而言,這個文件系統(tǒng)采用本發(fā)明提出的文件分割方法對文件進行分割操作。參照圖2,對于文件A,假定系統(tǒng)需要把該文件分割為8個子文件,根據(jù)本發(fā)明,分割步驟大致可以描述為,首先根據(jù)需要,依據(jù)子文件的尺寸把原文件的簇鏈表分割為多個子簇鏈表,根據(jù)這些子簇鏈表,在文件系統(tǒng)的文件分配區(qū)創(chuàng)建相應(yīng)的子文件的表項(entry),這些entry記錄了各個子文件的存儲信息,然后系統(tǒng)刪除掉文件A的原來的entry結(jié)構(gòu)。這樣的做法一方面沒有文件讀寫操作,另一方面不需要額外的消耗空間。
具體的實施過程是,首先讀取這個文件A的存儲位置信息,讀取的過程可以用以下函數(shù)接口描述unsigned char f_getfatsector(unsigned long sector)這個函數(shù)完成從磁盤中讀取FAT表的功能。由于采用本發(fā)明進行文件分割的時候,是不需要進行文件本身的數(shù)據(jù)讀寫的,因此,讀寫數(shù)據(jù)時只需要讀取這個文件的FAT表,獲取文件A的簇鏈表即可。
然后,系統(tǒng)劃分文件A的原有的簇鏈表,為這個文件創(chuàng)建多個新的簇鏈表,還需要為每個新的簇鏈表指定entry結(jié)構(gòu),這個entry結(jié)構(gòu)包括每個子文件的首簇值。劃分簇鏈表和創(chuàng)建子文件entry結(jié)構(gòu)的操作分別由以下的函數(shù)接口完成unsigned char f_getclustervalue(unsigned long cluster,unsigned long*pvalue)unsigned char f_setclustervalue(unsigned long cluster,unsigned long_tdata)UINT8 f_addentry(F_NAME*fsname,F(xiàn)_POS*pos,F(xiàn)_DIRENTRY**pde)以上3個函數(shù)會分別從FAT表中讀取簇鏈表的值、設(shè)置簇鏈表的值,以及創(chuàng)建子文件的entry結(jié)構(gòu)中并賦首簇值。這樣,由于根據(jù)FAT文件系統(tǒng)的性質(zhì),任何一個文件的起始位置都是由它的entry中的首簇值決定的,而文件的簇鏈表決定了整個文件在磁盤上的具體的鏈式存儲位置,因此,當這個文件具有多個獨立的簇鏈表及其entry后,文件A也就被定義多個子文件。對于本例,其中子文件A1從簇8開始到簇11,A2從簇12開始到簇15……A8從簇82開始到簇85。相應(yīng)的,系統(tǒng)使用上述2個函數(shù)會把文件A原有簇鏈表的簇11、簇15、簇85等等的值更改為FF FF,表明一個子文件至此已經(jīng)到達末尾部分。這樣,系統(tǒng)在讀取這些簇鏈表時,會認為從簇8開始到簇11是一個文件,從簇12開始到簇15是另一個獨立的文件,如何類推。
完成上述操作后,刪除掉原文件A的entry結(jié)構(gòu)。這樣,文件分割的過程就完成了。
可見,采用本發(fā)明提出的FAT文件系統(tǒng)中文件分割的方法實現(xiàn)文件分割,實際上并沒有進行真正意義上的文件分割,只是使用了FAT文件系統(tǒng)的鏈式存儲的特點,修改文件的簇鏈表,以此同樣達到了文件分割的目的。這樣的操作,不需要移動文件時所需的操作時間,而且不需要移動文件所需的存儲空間。因此,在節(jié)省操作時間的同時還節(jié)約了存儲空間。這樣的操作方法,對于大文件或速度較慢的小型處理器,有非常明顯的效果,因此本發(fā)明非常適用于嵌入式系統(tǒng)的開發(fā)。
這種采用了本發(fā)明提出的FAT文件系統(tǒng)中文件分割方法的FAT文件系統(tǒng),本領(lǐng)域的技術(shù)人員都可以把它應(yīng)用到其他場合中,例如應(yīng)用到通用計算機或其他嵌入式開發(fā)中。本實施例僅用于支持本發(fā)明,本發(fā)明的保護范圍應(yīng)該由權(quán)利要求書限定。
權(quán)利要求
1.一種FAT文件系統(tǒng)中文件分割的方法,其特征在于包括以下步驟(1)獲取文件的簇鏈表;(2)把原始文件的簇鏈表劃分為多個子鏈表;(3)創(chuàng)建新的子文件表項結(jié)構(gòu);(4)刪除原始文件的表項結(jié)構(gòu)。
2.如權(quán)利要求1所述的FAT文件系統(tǒng)中文件分割的方法,其特征在于步驟(3)創(chuàng)建的表項結(jié)構(gòu)中包含以下信息文件名字、屬性、創(chuàng)建時間、訪問時間、修改時間、文件大小、首簇值。
3.如權(quán)利要求1所述的FAT文件系統(tǒng)中文件分割的方法,其特征在于步驟(2)中,依據(jù)子文件的尺寸,把原始文件的簇鏈表劃分為多個子鏈表。
4.一種使用如權(quán)利要求1所述的方法的裝置,包括CPU和存儲器,其特征在于存儲器內(nèi)包括一個FAT文件系統(tǒng),當通過這個文件系統(tǒng)對文件進行分割時,將待分割的文件的簇鏈表劃分為多個子鏈表,然后創(chuàng)建新的子文件表項結(jié)構(gòu),再刪除原始文件的表項結(jié)構(gòu),完成文件分割過程。
5.如權(quán)利要求4所述的裝置,其特征在于還包括USB模塊,用于將該裝置與計算機相連。
全文摘要
本發(fā)明涉及計算機原理領(lǐng)域。本發(fā)明提出一種FAT文件系統(tǒng)中文件分割的方法,它對原文件的簇鏈表作出修改,創(chuàng)建新的子文件表項結(jié)構(gòu),最后刪除原文件的簇鏈表,即完成了文件的分割操作。采用本發(fā)明,不需要對文件進行讀寫操作,只需要修改簇鏈表就可以實現(xiàn)對文件的分割,可以節(jié)約文件操作時間、節(jié)省系統(tǒng)的存儲空間。
文檔編號G06F17/30GK1776687SQ20051013064
公開日2006年5月24日 申請日期2005年12月16日 優(yōu)先權(quán)日2005年12月16日
發(fā)明者孫豐強, 譚帥 申請人:北京中星微電子有限公司