專(zhuān)利名稱(chēng):一種文件組織方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及大容量文件的存儲(chǔ)和讀寫(xiě)操作技術(shù)。
背景技術(shù):
隨著科學(xué)技術(shù)的日益進(jìn)步,數(shù)據(jù)存儲(chǔ)設(shè)備容量越來(lái)越大,其中存儲(chǔ)的文件 也越來(lái)越大,因此,對(duì)于存儲(chǔ)設(shè)備中文件的管理系統(tǒng)也需要支持日益增大的文 件需求。
文件系統(tǒng)是操作系統(tǒng)用于明確》茲盤(pán)或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu),現(xiàn)
有的FAT (File Allocation Table文件分配表)文件系統(tǒng)和Ext2文件系統(tǒng)是廣泛 使用的兩種文件系統(tǒng),這兩種文件系統(tǒng)提供的文件支持打開(kāi)、關(guān)閉、讀、寫(xiě)、 定位等操作。
如上所述,存儲(chǔ)容量的增大也導(dǎo)致所要存^:的文件的日益增大,但是現(xiàn)有
的FAT文件系統(tǒng)最大支持的文件大小為2G,對(duì)超過(guò)2G的文件不能支持。雖然 Ext2文件系統(tǒng)支持大于2G的文件,但是對(duì)于這種大文件讀寫(xiě)定位的操作效率 沒(méi)有對(duì)小于2G的文件的操:作快。
因此,有必要提供一種技術(shù)方案,能夠支持大文件并且能夠高效的操作。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種文件組織方法,旨在解決現(xiàn)有大容量文件的存 儲(chǔ)問(wèn)題。
本發(fā)明是這樣實(shí)現(xiàn)的, 一種文件組織的方法,所述的方法包括如下步驟 一種文件組織的方法,所述的方法包括如下步驟
a、建立模擬文件的文件夾,b、在所述的文件夾下建立一個(gè)記錄文件信息 數(shù)據(jù)的信息子文件,并在所述文件夾下建立r個(gè)以上的內(nèi)容子文件,所述的內(nèi) 容子文件用來(lái)存儲(chǔ)所述文件的內(nèi)容數(shù)據(jù)。 '
.所述記錄文件信息數(shù)據(jù)的信息子文件為INFO.inf文件,所記錄的信息數(shù)據(jù) 包括所述文件的標(biāo)志、子文件的個(gè)數(shù)和每個(gè)子文件的大小。
所述INFO.inf文件還可以記錄文件創(chuàng)建時(shí)間和/或修改時(shí)間。
所述文件標(biāo)志用來(lái)檢驗(yàn)符合本規(guī)格的大文件是否存在。
所述內(nèi)容子文件的后綴為.dat。
所述的內(nèi)容子文件的個(gè)數(shù)4艮據(jù)所述文件大小來(lái)定。
所述文件為大小超過(guò)2GB的文件。
在步驟b后還包括對(duì)所述文件的讀、寫(xiě)、打開(kāi)或者定位操作步驟。 對(duì)所述文件的讀、寫(xiě)、打開(kāi)或者定位操作轉(zhuǎn)化為對(duì)所述子文件的操作。 對(duì)所述文件的揭:作采用FAT文件系統(tǒng)或者Ext2文件系統(tǒng)。 所述寫(xiě)才乘作包括以下步驟
(1) 根據(jù)大文件句柄提供的子文件的信息,判斷當(dāng)前的內(nèi)容子文件是否能 夠?qū)懭肴績(jī)?nèi)容,如果是,轉(zhuǎn)步驟(2),否則轉(zhuǎn)步驟(3);
(2) 直接寫(xiě)入到當(dāng)前的內(nèi)容子文件中,返回寫(xiě)成功;
(3) 將要寫(xiě)入的內(nèi)容分成兩部分, 一部分寫(xiě)入當(dāng)前的內(nèi)容子文件,同時(shí)新 建一個(gè)內(nèi)容子文件,將另一部分?jǐn)?shù)據(jù)寫(xiě)入,返回寫(xiě)成功。
所述讀操作包括以下步驟
(1) 判斷文件能否滿(mǎn)足當(dāng)前要讀的內(nèi)容大小,滿(mǎn)足轉(zhuǎn)步驟(3),否則轉(zhuǎn)步驟
(2);
(2) 調(diào)整要讀的內(nèi)容大小為文件實(shí)際能提供的內(nèi)容大小,然后轉(zhuǎn)步驟(3);
(3) 通過(guò)大文件句柄中包含的當(dāng)前子文件的句柄轉(zhuǎn)換為對(duì)小文件的讀取數(shù) 據(jù),按照文件索引值依次讀取子文件數(shù)據(jù),直到滿(mǎn)足要讀的文件大小;然后返 回i賣(mài)耳又成功。
所述定位操作包^"以下步驟
(1) 將大文件指針的位置拆分轉(zhuǎn)換成子文件的位置,利用大文件當(dāng)前的位 置對(duì)子文件的大小進(jìn)行取商和取余的運(yùn)算得到對(duì)于子文件的索引值和對(duì)于子文
件的位置;
(2) 利用小文件的定位操作,根據(jù)大文件句柄記錄的子文件的信息以及步 驟(l)得到子文件的信息,打開(kāi)相應(yīng)的子文件進(jìn)行定位操作。
本發(fā)明克服現(xiàn)有技術(shù)的不足,采用文件夾模擬大文件,該文件夾包括記錄 大文件信息數(shù)據(jù)的INFO.inf文件,以及記錄大文件的內(nèi)容數(shù)據(jù)的一系列的.dat 文件,對(duì)于按照本發(fā)明技術(shù)方案組織的超過(guò)2G的大文件,F(xiàn)AT文件系統(tǒng)也能 夠支持,并且對(duì)大文件的操作效率與操作小文件 一樣。
圖l是本發(fā)朋實(shí)施例提供的大文件結(jié)構(gòu)圖2是本發(fā)明實(shí)施例所述的打開(kāi)大文件的操作的流程圖3是本發(fā)明實(shí)施例所述的對(duì)大文件寫(xiě)操作的流程圖4是本發(fā)明實(shí)施例所述從大文件讀數(shù)據(jù)流程圖5是本發(fā)明實(shí)施例所述的對(duì)大文件進(jìn)行定位操作的流程圖。
具體實(shí)施例方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明,白,以下結(jié)合附圖及實(shí) 施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅 僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明實(shí)施例中使用文件夾模擬大文件,在此文件夾下建立一系列的內(nèi)容 子文件來(lái)記錄大丈件的內(nèi)容數(shù)據(jù),同時(shí)在文件夾下建立一個(gè)特歹朱的信息子文件 來(lái)記錄該大文件的信息數(shù)據(jù),包括大文件的標(biāo)志、子文件的個(gè)凄t、每個(gè)子文件 的大小等信息,等價(jià)于文件的目錄項(xiàng),同時(shí)為用戶(hù)提供統(tǒng)一操作大文件的操作
接口,這些接口最終會(huì)轉(zhuǎn)換為對(duì)小文件的操作。而對(duì)于小文件的操作既可以采
用FAT文件系統(tǒng)也可以采用Ext2文件系統(tǒng)或者其他《件系統(tǒng),只要支持對(duì)小 文件操作的文件系統(tǒng)都可以,這樣能保證大文件系統(tǒng)的擴(kuò)平臺(tái)使用。
本發(fā)明實(shí)施例所指的大文件是指文件大小超過(guò)FAT文件系統(tǒng)支持的最大 2GB大小的文件,這種文件在視頻錄制的方面應(yīng)用的非常多,具體應(yīng)用本發(fā)明 技術(shù)方案時(shí),對(duì)于大小不到2GB的文件,也同樣可以采用本發(fā)明實(shí)施例提供的 組織方法。
本發(fā)明實(shí)施例所述的大文件的結(jié)構(gòu)如圖1所示,圖1中外圍的虛線(xiàn)部分表 示是用一個(gè)文件夾模擬的大文件,包括記錄大文件的信息數(shù)據(jù)的INFO.inf文件, 以及記錄大文件的內(nèi)容數(shù)據(jù)的一系列的.dat文件,如01.dat、 02.dat、 03.dat、
04.dat.......,這些.dat文件即為上文所述的內(nèi)容子文件,內(nèi)容子文件的大小是
自定義的一個(gè)值,除了最后一個(gè).dat文件有可能不是這個(gè)大小,其余的.dat文件 都是必須是這個(gè)大小。大文件的組成規(guī)則如下
1、大文件是文件夾;
2 、該文件夾中包含唯一的INFO.inf文件和至少 一個(gè)后綴為.dat的文件;
3、 INFO.inf文件記錄以下內(nèi)容 一是自定義的大文件標(biāo)志,用于檢驗(yàn)是否 是本規(guī)格的大文件;二是dat文件的大?。蝗谴笪募凶游募膫€(gè)數(shù);此外, 還可以包括一些文件創(chuàng)建時(shí)間、修改時(shí)間等其他的項(xiàng);
4、 后綴為.dat的文件是真正記錄大文件內(nèi)容數(shù)據(jù)的文件,而.dat文件的個(gè) 數(shù)^f艮據(jù)大文件的大小而定。
本實(shí)施例的大文件也提供了對(duì)按照上述規(guī)則和組織方法組成的大文件的操 作接口,包括一般文件系統(tǒng)為子文件提供的常用的操作接口,例如打開(kāi)、讀、 寫(xiě)、文件指針定位和關(guān)閉文件等基本的文件操作,對(duì)大文件的讀寫(xiě)操作將轉(zhuǎn)化 為對(duì)子文件的讀寫(xiě)操作。
打開(kāi)操作的流程如圖2所示,具體包括如下的步驟
1.1通過(guò)文件夾下的rNFO.inf文件中的標(biāo)志來(lái)判斷是否是符合本規(guī);格的大
文件,檢驗(yàn)符合本規(guī)格的大文件是否存在,如果存在轉(zhuǎn)1.2,否則轉(zhuǎn)1.3; 1.2打開(kāi)文件,辨用Malbc分配句柄空間,返回一個(gè)大文件.句柄; 1.3判斷文件不存在原因,'如果是文件夾存在,不符合本大文件規(guī)格,'轉(zhuǎn)
1.4(例如,和本大文件同名的文件夾存在,但是該文件夾下面沒(méi)有INFO.inf
文件,或者沒(méi)有任何.dat文件),否則轉(zhuǎn)1.5;
1.4要打開(kāi)的文件不是本規(guī)格的大文件,打開(kāi)失敗,返回空的句柄;
1.5根據(jù)打開(kāi)標(biāo)簽決定打開(kāi)方式,如果是只讀方式打開(kāi),轉(zhuǎn)1.6,如果是可
寫(xiě)的方式打開(kāi),轉(zhuǎn)1.7;
1.6只讀方式打開(kāi)一個(gè)不存在的文件,打開(kāi)失敗,返回空的句柄;
1.7可寫(xiě)的方式打開(kāi)一個(gè)不存在的文件,則創(chuàng)建此文件;創(chuàng)建文件時(shí),首
先創(chuàng)建文件夾,然后分別創(chuàng)建INFO.inf和.dat文件,并寫(xiě)入INFO.inf文件的內(nèi)
容,返回大文件句柄。創(chuàng)建成功后,轉(zhuǎn)步驟1.2。
其中,大文件句柄包含當(dāng)前子文件的索引、當(dāng)前子文件的操作句柄、讀寫(xiě)
權(quán)限標(biāo)志、大文件句柄在大文件中的位置以及大文件對(duì)應(yīng)的INPO.inf文件信息
的指針。
對(duì)大文件寫(xiě)操作,需要傳入打開(kāi)大文件時(shí)返回的大文件句柄,已經(jīng)寫(xiě)入的 數(shù)據(jù)緩存空間和緩存空間的大小。
寫(xiě)操作的流程如圖3所示,具體包括如下的步驟
2.1判斷傳入的大文件句柄是否支持可寫(xiě),不支持轉(zhuǎn)2.2,支持轉(zhuǎn)2.3;
2.2返回寫(xiě)失?。?br>
2.3根據(jù)大文件句柄提供的子文件的信息,判斷當(dāng)前的.dat文件是否能夠?qū)?入全部?jī)?nèi)容,如果是,轉(zhuǎn)2.4,否則轉(zhuǎn)2.5;
2.4直接寫(xiě)入到當(dāng)前的.dat中,返回寫(xiě)成功;
2.5將要寫(xiě)入的內(nèi)容分成兩部分, 一部分寫(xiě)入當(dāng)前.dat,同時(shí)新建一個(gè).dat 文件,將另一部分凄史據(jù)寫(xiě)入,返回寫(xiě)成功;
從大文件讀數(shù)據(jù)操作,需要傳入打開(kāi)大文件返回的文件句柄,要讀取的數(shù)
據(jù)緩存空間和緩存空間的大小。
讀數(shù)據(jù)所進(jìn)行的操作流程如圖4所示,具體包括如下步驟
3.1判斷該句柄能否支持可讀,如果不支持,轉(zhuǎn)進(jìn)入3.2,否則轉(zhuǎn)3.3;
3.2返回讀失?。?br>
3.3判斷文件能否滿(mǎn)足當(dāng)前要讀的內(nèi)容大小,滿(mǎn)足轉(zhuǎn)3.5,否則轉(zhuǎn)3.4; 3.4調(diào)整要讀的內(nèi)容大小為文件實(shí)際能提供的內(nèi)容大小; 3.5通過(guò)大文件句柄中包含的當(dāng)前子文件的句柄轉(zhuǎn)換為對(duì)小文件的讀取數(shù) 據(jù),按照文件索引值依次讀取子文件數(shù)據(jù),直到滿(mǎn)足要讀的文件大??;, 3.6讀耳又成功;
本發(fā)明提供的大文件的組織方法,還可以進(jìn)行定位大文件句柄的操作,可 以改變大文件句柄在當(dāng)前所處的文件中的位置,結(jié)合讀4喿作,可以隨意讀取文 件任何位置的內(nèi)容。例如以下應(yīng)用,在個(gè)人視頻錄像(Personal Video Record, PVR) 數(shù)字電視機(jī)頂盒中,在播放錄制的音視頻文件的時(shí)候,可以隨意選擇播放的不 同位置。
定位操作需要傳入打開(kāi)大文件時(shí)返回的大文件句柄,句柄移動(dòng)位置的大小, 移動(dòng)的相對(duì)位置(文件頭,文件當(dāng)前位置、文件尾)。 具體流程如圖5所示,包括如下的步驟
4.1將大文件指針的位置拆分轉(zhuǎn)換成子文件的位置,利用大文件當(dāng)前的位 置對(duì)子文件的大小進(jìn)行取商和取余的運(yùn)算得到對(duì)于子文件的索引值和對(duì)于子文 件的位置;
4.2利用小文件的定位操作,根據(jù)大文件句柄記錄的子文件的信息以及5.1 得到子文件的信息,打開(kāi)相應(yīng)的子文件進(jìn)行定位操:作。
關(guān)閉大文件時(shí),調(diào)用子文件操作接口,關(guān)閉INFO.inf和.dat文件,然后調(diào) 用Free函數(shù)釋放大文件句柄指向的空間。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā) 明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明 的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種文件組織的方法,其特征在于,所述的方法包括如下步驟a、建立模擬文件的文件夾,b、在所述的文件夾下建立一個(gè)記錄文件信息數(shù)據(jù)的信息子文件,并在所述文件夾下建立一個(gè)以上的內(nèi)容子文件,所述的內(nèi)容子文件用來(lái)存儲(chǔ)所述文件的內(nèi)容數(shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述記錄文件信息數(shù)據(jù)的信 息子文件為INFO.inf文件,所記錄的信息數(shù)據(jù)包括所述文件的標(biāo)志、子文件的 個(gè)數(shù)和每個(gè)子文件的大小。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述INFO.inf文件還可以 記錄文件創(chuàng)建時(shí)間和/或#~改時(shí)間。
4、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述文件標(biāo)志用來(lái)檢驗(yàn)符合 本規(guī)格的大文件是否存在。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述內(nèi)容子文件的后綴為.dat。
6、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述的內(nèi)容子文件的個(gè)數(shù)根 據(jù)所述文件大小來(lái)定。
7、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述文件為大小超過(guò)2GB 的文件。
8、 根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟b后還包括對(duì)所述文 件的讀、寫(xiě)、打開(kāi)或者定位4喿作步驟。
9、 根據(jù)權(quán)利要求8所述的方法,其特征在于,對(duì)所述文件的讀、寫(xiě)、打開(kāi) 或者定位操作轉(zhuǎn)化為對(duì)所述子文件的操作。
10、 根據(jù)權(quán)利要求8所述的方法,其特征在于,對(duì)所述文件的操作采用FAT 文件泉統(tǒng)或者Ext2文件系統(tǒng)。
11、 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述寫(xiě)操作包括以下步驟 (1)根據(jù)大文件句柄提供的子文件的信息,判斷當(dāng)前的內(nèi)容子文件是否能夠?qū)懭肴績(jī)?nèi)容,如果是,轉(zhuǎn)步驟(2),否則轉(zhuǎn)步驟(3);(2) 直接寫(xiě)入到當(dāng)前的內(nèi)容子文件中,返回寫(xiě)成功;(3) 將要寫(xiě)入的內(nèi)容分成兩部分, 一部分寫(xiě)入當(dāng)前的內(nèi)容子文件,同時(shí)新 建一個(gè)內(nèi)容子文件,將另一部分?jǐn)?shù)據(jù)寫(xiě)入,返回寫(xiě)成功。
12、 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述讀操作包括以下步驟(1) 判斷文件能否滿(mǎn)足當(dāng)前要讀的內(nèi)容大小,滿(mǎn)足轉(zhuǎn)步驟(3),否則轉(zhuǎn)步驟(2);(2) 調(diào)整要讀的內(nèi)容大小為文件實(shí)際能提供的內(nèi)容大小,然后轉(zhuǎn)步驟(3);(3) 通過(guò)大文件句柄中包含的當(dāng)前子文件的句柄轉(zhuǎn)換為對(duì)小文件的讀取數(shù)據(jù),按照文件索引值依次讀取子文件數(shù)據(jù),直到滿(mǎn)足要讀的文件大小;然后返 回讀取成功。
13、 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述定位操作包括以下步驟(1) 將大文件指針的位置拆分轉(zhuǎn)換成子文件的位置,利用大文件當(dāng)前的位 置對(duì)子文件的大小進(jìn)行取商和取余的運(yùn)算得到對(duì)于子文件的索引值和對(duì)于子文 件的位置;(2) 利用小文件的定位操作,根據(jù)大文件句柄記錄的子文件的信息以及步 驟(l)得到子文件的信息,打開(kāi)相應(yīng)的子文件進(jìn)行定位操作。
全文摘要
本發(fā)明提供了一種文件組織的方法,所述的方法包括如下步驟a.建立模擬文件的文件夾,b.在所述的文件夾下建立一個(gè)記錄文件信息數(shù)據(jù)的信息子文件,并在所述文件夾下建立一個(gè)以上的內(nèi)容子文件,所述的內(nèi)容子文件用來(lái)存儲(chǔ)所述文件的內(nèi)容數(shù)據(jù)。對(duì)于按照本發(fā)明技術(shù)方案組織的超過(guò)2GB的大文件,F(xiàn)AT文件系統(tǒng)也能夠支持,并且對(duì)大文件的操作效率與操作小文件一樣。
文檔編號(hào)G06F17/30GK101206660SQ20071012481
公開(kāi)日2008年6月25日 申請(qǐng)日期2007年12月5日 優(yōu)先權(quán)日2007年12月5日
發(fā)明者尹本清 申請(qǐng)人:深圳市同洲電子股份有限公司