專利名稱:一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法。
背景技術(shù):
嵌入式系統(tǒng)中,由于某些功能的特性以及設(shè)計(jì)思想,要求對(duì)于某些文件的打開操 作具有相當(dāng)高的頻繁度,或是要求同時(shí)打開很多個(gè)文件,但由于系統(tǒng)對(duì)于這些操作的時(shí)間 有一定的限制,如果超出該時(shí)間限制,則會(huì)令操作失敗,因此,需要一種快速的打開文件的 方法來(lái)解決這類問(wèn)題。對(duì)于一個(gè)fat(File Allocation Table,文件分配表)文件,它是由文件的目錄項(xiàng)、 fat鏈表以及文件內(nèi)容組成。現(xiàn)有的fat文件系統(tǒng)中打開文件的方法,包括如下步驟通過(guò) 文件的目錄項(xiàng)找到它的簇鏈的第一個(gè)位置,然后讀取整條簇鏈信息(fat鏈表信息),最后 可以根據(jù)需要找到簇鏈中對(duì)應(yīng)的文件內(nèi)容。對(duì)于這個(gè)過(guò)程,時(shí)間主要都耗在了簇鏈讀取的 過(guò)程中,尤其是當(dāng)該磁盤已經(jīng)被使用了相當(dāng)長(zhǎng)的一段時(shí)間,fat表中存在許多碎片,并且文 件內(nèi)容比較大時(shí),讀取一條簇鏈信息可能需要跨越十幾個(gè)乃至幾十個(gè)扇區(qū)。因此,對(duì)于某些 操作是嚴(yán)重耗時(shí)的,例如,系統(tǒng)需要打開數(shù)目眾多的文件;頻繁打開文件,檢驗(yàn)該文件是否 存在;獲取文件的創(chuàng)建時(shí)間,修改時(shí)間或是最后訪問(wèn)時(shí)間;獲取文件大小的信息等。現(xiàn)有的fat文件關(guān)閉方法,需要最后將fat鏈表信息逐個(gè)寫入,并且同時(shí)刷新文件 的目錄項(xiàng)信息,以保證文件簇鏈信息的完整性。對(duì)于多數(shù)系統(tǒng)文件,這樣的操作既多余又耗 時(shí),因?yàn)槎鄶?shù)系統(tǒng)文件是用來(lái)記錄一些固定的結(jié)構(gòu)信息或是少量的配置信息的,這些文件 的大小以及文件目錄項(xiàng)信息是固定不變的。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,意在 提高fat格式文件系統(tǒng)的文件打開、關(guān)閉的速度,從而提高操作效率。本發(fā)明的技術(shù)方案可以通過(guò)以下的技術(shù)措施來(lái)實(shí)現(xiàn),一種fat格式文件系統(tǒng)中加 速打開/關(guān)閉文件的方法,包括以下步驟(1).打開文件,系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要讀取fat鏈表信息,如果是,則 系統(tǒng)先讀取fat鏈表信息,再對(duì)文件進(jìn)行操作,然后轉(zhuǎn)入步驟(2);否則,直接對(duì)文件進(jìn)行操 作,然后轉(zhuǎn)入步驟⑶;(2).系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要刷新目錄項(xiàng)信息,如果是,則系統(tǒng)先刷新 目錄項(xiàng)信息,然后轉(zhuǎn)入步驟(3);否則,直接轉(zhuǎn)入步驟(3);(3).關(guān)閉文件。上述參數(shù)為文件打開函數(shù)中的參數(shù),即分別定義“加速打開文件_不讀取fat鏈表 信息”、“加速關(guān)閉文件_不刷新目錄項(xiàng)信息”為文件打開函數(shù)的兩個(gè)參數(shù),可以將上述其中 一個(gè)參數(shù)預(yù)先傳入到文件打開函數(shù)中,即當(dāng)用戶打開文件,對(duì)文件打開函數(shù)進(jìn)行調(diào)入時(shí),便 傳入相應(yīng)參數(shù),從而實(shí)現(xiàn)加速打開、關(guān)閉文件的目的。
本發(fā)明所述的步驟(1)中,系統(tǒng)先讀取fat鏈表信息,再對(duì)文件進(jìn)行的操作一般為 讀寫操作;系統(tǒng)不讀取fat鏈表信息,而直接對(duì)文件進(jìn)行的操作一般為與文件內(nèi)容無(wú)關(guān)的 操作。因此,當(dāng)打開文件時(shí),當(dāng)前并不需要用到該文件的簇鏈信息,而僅僅是為了找到這 個(gè)文件的相關(guān)信息,進(jìn)行例如檢驗(yàn)文件是否存在,獲取文件的創(chuàng)建時(shí)間、修改時(shí)間、最后訪 問(wèn)時(shí)間,獲取文件大小,獲取文件屬性信息等與文件內(nèi)容無(wú)關(guān)的操作,則適合采用加速打開 文件的方法,即系統(tǒng)不讀取fat鏈表信息,直接對(duì)文件進(jìn)行操作。當(dāng)以后需要使用時(shí),再將 這部分fat鏈表信息讀取出來(lái)。文件的目錄項(xiàng)信息包括文件名稱、文件創(chuàng)建時(shí)間、修改時(shí)間、最后訪問(wèn)時(shí)間、文件 屬性、文件長(zhǎng)度等。對(duì)于某些文件,如果文件的修改時(shí)間、最后訪問(wèn)時(shí)間等信息是不重要的, 并且文件的名稱沒有發(fā)生任何變化,那么關(guān)閉這個(gè)文件時(shí),目錄項(xiàng)信息是不需要刷新的,即 適合采用本發(fā)明所述步驟2中的加速關(guān)閉文件的方法。文件的fat鏈表是記錄文件大小(長(zhǎng)度)的一個(gè)鏈表,而文件的目錄項(xiàng)信息中包 括一個(gè)上述的文件長(zhǎng)度的記錄項(xiàng),因此,文件的fat鏈表和目錄項(xiàng)信息總是相互聯(lián)系的,即 目錄項(xiàng)信息中記錄的文件長(zhǎng)度與fat鏈表中記錄的文件長(zhǎng)度必須一致。本發(fā)明還可以作如下改進(jìn),當(dāng)對(duì)文件完成讀寫操作后,文件大小沒有發(fā)生變化,每 次在關(guān)閉此類文件的時(shí)候,將不再需要刷新fat鏈表信息和目錄項(xiàng)信息。因此,本發(fā)明所 述的步驟(2)中,系統(tǒng)可以根據(jù)參數(shù)同時(shí)判斷文件是否需要刷新fat鏈表信息和目錄項(xiàng)信 息,如果是,則系統(tǒng)同時(shí)刷新fat鏈表信息和目錄項(xiàng)信息,然后轉(zhuǎn)入步驟(3);否則,在不刷 新fat鏈表信息和目錄項(xiàng)信息的情況下直接轉(zhuǎn)入步驟(3)。相應(yīng)地,可以定義“加速關(guān)閉文 件_不刷新fat鏈表信息和目錄項(xiàng)信息”為文件打開函數(shù)的第三個(gè)參數(shù),將該參數(shù)預(yù)先傳入 到文件打開函數(shù)中后,系統(tǒng)則在不刷新fat鏈表信息和目錄項(xiàng)信息的情況下直接將文件關(guān) 閉。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)是(1).本發(fā)明的fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,對(duì)于提高操作效 率有顯著效果。采用本發(fā)明的方法后,打開文件時(shí)不需要讀取fat鏈表信息,在某些操作上 會(huì)節(jié)約相當(dāng)可觀的時(shí)間,如頻繁打開文件,檢驗(yàn)該文件是否存在;獲取文件的創(chuàng)建時(shí)間, 修改時(shí)間或者最后訪問(wèn)時(shí)間等;獲取文件大小的信息。同理,關(guān)閉文件時(shí)也可以相應(yīng)縮短文 件的操作流程,即可以不刷新fat鏈表信息、不刷新目錄項(xiàng)信息而直接關(guān)閉文件,大大節(jié)約 了操作時(shí)間。需要說(shuō)明的是,文件打開或關(guān)閉的時(shí)間是與文件的大小成正比的,因此,如果 所要操作的文件是比較大的,那么節(jié)約的時(shí)間將會(huì)是相當(dāng)可觀的。(2).本發(fā)明的fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,該加速方法是可 配置的,增強(qiáng)了使用本方法的靈活性用戶打開文件的時(shí)候,只需要配置相應(yīng)的打開方式, 即將相應(yīng)的參數(shù)預(yù)先傳入到文件打開函數(shù)中,就可以任意選擇自己需要的特性加速打開 文件_不讀fat鏈表信息、加速關(guān)閉文件_不刷新目錄項(xiàng)信息、加速關(guān)閉文件_不刷新fat 鏈表信息和目錄項(xiàng)信息。以上這三種方式也可以與正常打開/關(guān)閉文件的方法混合使用。下面為分別應(yīng)用本發(fā)明與現(xiàn)有技術(shù)進(jìn)行打開、關(guān)閉文件的對(duì)比實(shí)例,進(jìn)一步說(shuō)明 本發(fā)明的有益效果實(shí)例1 打開一個(gè)大小為IOM的文件,并進(jìn)行檢查這個(gè)文件是否存在的操作。用普通的打開方式,需要耗時(shí)為52毫秒;而使用本發(fā)明的加速打開方式,需要耗時(shí)僅為5毫秒。實(shí)例2 用手機(jī)開機(jī)打開一個(gè)大小為IOOk的文件,并進(jìn)行修改這個(gè)文件內(nèi)容的操 作,但文件大小不變。使用普通關(guān)閉文件方式,需要耗時(shí)為882毫秒;而使用本發(fā)明的加速 關(guān)閉文件方式,即不刷新fat鏈表、不刷新目錄項(xiàng),需要耗時(shí)僅為356毫秒。以上對(duì)比實(shí)例充分證明了本發(fā)明的加速打開/關(guān)閉文件的方法可以有效節(jié)省操 作時(shí)間,從而提高操作效率。
圖1是本發(fā)明實(shí)施例1的流程圖;圖2是本發(fā)明實(shí)施例2的流程圖。
具體實(shí)施例方式實(shí)施例1本發(fā)明的具體實(shí)施方式
如圖1所示,一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文 件的方法,包括以下步驟(1).打開文件,系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要讀取fat鏈表信息,如果是,則 系統(tǒng)先讀取fat鏈表信息,再對(duì)文件進(jìn)行操作,然后轉(zhuǎn)入步驟(2);否則,直接對(duì)文件進(jìn)行操 作,然后轉(zhuǎn)入步驟⑶;(2).系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要刷新目錄項(xiàng)信息,如果是,則系統(tǒng)先刷新 目錄項(xiàng)信息,然后轉(zhuǎn)入步驟(3);否則,直接轉(zhuǎn)入步驟(3);(3).關(guān)閉文件。本發(fā)明的參數(shù)為文件打開函數(shù)中的參數(shù),即分別定義“加速打開文件_不讀取fat 鏈表信息”、“加速關(guān)閉文件_不刷新目錄項(xiàng)信息”為文件打開函數(shù)的兩個(gè)參數(shù),并將上述其 中一個(gè)參數(shù)預(yù)先傳入到文件打開函數(shù)中,即當(dāng)用戶打開文件,對(duì)文件打開函數(shù)進(jìn)行調(diào)入時(shí), 便傳入相應(yīng)參數(shù)。因此,用戶打開文件的時(shí)候,只需要配置好打開方式,就可以選擇自己需 要的特性,從而實(shí)現(xiàn)加速打開、關(guān)閉文件的目的。本發(fā)明的步驟(1)中,系統(tǒng)先讀取fat鏈表信息,再對(duì)文件進(jìn)行的操作一般為讀寫 操作;而在系統(tǒng)不讀取fat鏈表信息的情況下直接對(duì)文件進(jìn)行的操作一般為與文件內(nèi)容無(wú) 關(guān)的操作,該與文件內(nèi)容無(wú)關(guān)的操作包括檢驗(yàn)文件是否存在,獲取文件的創(chuàng)建時(shí)間、修改時(shí) 間、最后訪問(wèn)時(shí)間,獲取文件大小、文件屬性等相關(guān)信息的操作,其中,文件屬性是指該文件 是否是系統(tǒng)文件、隱藏文件、只讀文件等文件類型信息。因此,當(dāng)打開文件時(shí),當(dāng)前并不需要 用到該文件的簇鏈信息,而僅僅是為了找到這個(gè)文件的相關(guān)信息,則適合采用加速打開文 件的方法,即系統(tǒng)不讀取fat鏈表信息,直接對(duì)文件進(jìn)行操作。當(dāng)以后需要使用時(shí),再將這 部分fat鏈表信息讀取出來(lái)。對(duì)于某些文件,如果文件的修改時(shí)間、最后訪問(wèn)時(shí)間等信息是不重要的,并且文件 的名稱沒有發(fā)生任何變化,那么關(guān)閉這個(gè)文件時(shí),目錄項(xiàng)信息是不需要刷新的,即適合采用 本發(fā)明步驟(2)中的加速關(guān)閉文件的方法。下面列舉具體實(shí)例說(shuō)明文件打開函數(shù)的接口為
T_PFILE File_0pen(T_PFILE parent, const T_U16*FileName, T_U32mode)其中,parent是父目錄的文件句柄,F(xiàn)ileName是文件名,mode是指定文件將以什 么方式打開,定義如下參數(shù)
文件以只讀方式打開 文件被創(chuàng)建
文件將以覆蓋的方式打開 文件以繼續(xù)追加的方式打開#define FILE_M0DE_READ0x00#define FILE_MODE_CREATE 0x01#define FILE_M0DE_0VERLAY 0x02#define FILE_MODE_APPEND 0x03如上是幾種普通的打開方式,文件打開范例如下File_0pen (null, "B:/TestFile", FILE_M0DE_READ)這個(gè)函數(shù)說(shuō)明B盤下的文件TestFile將會(huì)以只讀方式被打開。File_0pen (null, "B:/TestFile", FILE_MODE_CREATE)這個(gè)函數(shù)說(shuō)明B盤下將會(huì)創(chuàng)建一個(gè)文件TestFiIe。當(dāng)使用本實(shí)施例的加速打開/關(guān)閉文件的方法時(shí),定義如下參數(shù)#define FILE_MODE_EXT_FAT_FIXED 0x40000000 打開文件時(shí)不需要讀 fat 鏈表 fn息#define FILE_MODE_EXT_FDT_FIXED 0x80000000 關(guān)閉文件時(shí)不需要刷新目錄
項(xiàng)信息因此,當(dāng)想要不讀fat鏈表信息時(shí),文件打開如下Fi le_0pen (null ,"B: /TestFi Ie ”,F(xiàn)ILE_M0DE_READ | FILE_MODE_EXT_FAT_FIXED)此時(shí),這個(gè)文件的fat鏈表信息就不會(huì)被讀出來(lái)。如果不想刷新目錄項(xiàng)信息時(shí),文件打開如下File_0pen(null, "B:/TestFile", FILE_M0DE_0VERLAY|FILE_MODE_EXT_FDT_ FIXED)此時(shí),這個(gè)文件在關(guān)閉時(shí),不會(huì)刷新目錄項(xiàng)信息。實(shí)施例2本發(fā)明的具體實(shí)施方式
如圖2所示,與實(shí)施例1所不同的是,對(duì)于某些文件,如用 來(lái)記錄一些固定的結(jié)構(gòu)信息或是少量的配置信息的系統(tǒng)文件。當(dāng)完成讀寫操作后,文件大 小沒有發(fā)生變化,即從創(chuàng)建到最后,文件的大小都是固定的一個(gè)結(jié)構(gòu),那么每次在關(guān)閉此類 文件的時(shí)候,不再需要刷新fat鏈表信息和目錄項(xiàng)信息。例如,僅在原來(lái)文件內(nèi)容的基礎(chǔ)上 進(jìn)行一些修改,而文件的大小不變,則完全可以在創(chuàng)建之初就給其分配足夠的空間信息,即 足夠多的簇鏈,那么關(guān)閉這個(gè)文件時(shí),不需要刷新目錄項(xiàng)信息和fat鏈表信息。因此,在所 述的步驟(2)中,系統(tǒng)可以根據(jù)參數(shù)同時(shí)判斷文件是否需要刷新fat鏈表信息和目錄項(xiàng)信 息,如果是,則系統(tǒng)同時(shí)刷新fat鏈表信息和目錄項(xiàng)信息,然后轉(zhuǎn)入步驟(3),即關(guān)閉文件; 否則,在不刷新fat鏈表信息和目錄項(xiàng)信息的情況下直接轉(zhuǎn)入步驟(3),即直接關(guān)閉文件。 相應(yīng)地,定義“加速關(guān)閉文件_不刷新fat鏈表信息和目錄項(xiàng)信息”為文件打開函數(shù)的第三 個(gè)參數(shù),將該參數(shù)預(yù)先傳入到文件打開函數(shù)中后,系統(tǒng)在不刷新fat鏈表信息和目錄項(xiàng)信 息的情況下直接將文件關(guān)閉,大大提高了操作效率。
權(quán)利要求
一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特征在于包括以下步驟(1).打開文件,系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要讀取fat鏈表信息,如果是,則系統(tǒng)先讀取fat鏈表信息,再對(duì)文件進(jìn)行操作,然后轉(zhuǎn)入步驟(2);否則,直接對(duì)文件進(jìn)行操作,然后轉(zhuǎn)入步驟(3);(2).系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要刷新目錄項(xiàng)信息,如果是,則系統(tǒng)先刷新目錄項(xiàng)信息,然后轉(zhuǎn)入步驟(3);否則,直接轉(zhuǎn)入步驟(3);(3).關(guān)閉文件。
2.根據(jù)權(quán)利要求1所述的一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特 征在于所述的參數(shù)為文件打開函數(shù)中的參數(shù),即分別定義“加速打開文件_不讀取fat鏈表 信息”、“加速關(guān)閉文件_不刷新目錄項(xiàng)信息”為文件打開函數(shù)的兩個(gè)參數(shù),并將上述其中一 個(gè)參數(shù)預(yù)先傳入到文件打開函數(shù)中。
3.根據(jù)權(quán)利要求2所述的一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特 征在于所述的步驟(1)中,系統(tǒng)先讀取fat鏈表信息,再對(duì)文件進(jìn)行的操作為讀寫操作。
4.根據(jù)權(quán)利要求2所述的一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特 征在于所述的步驟(1)中,系統(tǒng)不讀取fat鏈表信息,而直接對(duì)文件進(jìn)行的操作為與文件內(nèi) 容無(wú)關(guān)的操作。
5.根據(jù)權(quán)利要求4所述的一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特 征在于所述的與文件內(nèi)容無(wú)關(guān)的操作包括檢驗(yàn)文件是否存在,獲取文件的創(chuàng)建時(shí)間、修改 時(shí)間、最后訪問(wèn)時(shí)間,獲取文件大小、文件屬性信息的操作。
6.根據(jù)權(quán)利要求2所述的一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特 征在于所述的步驟(2)中,系統(tǒng)根據(jù)參數(shù)同時(shí)判斷文件是否需要刷新fat鏈表信息和目錄 項(xiàng)信息,如果是,則系統(tǒng)同時(shí)刷新fat鏈表信息和目錄項(xiàng)信息,然后轉(zhuǎn)入步驟3,否則,在不 刷新fat鏈表信息和目錄項(xiàng)信息的情況下直接轉(zhuǎn)入步驟3。
7.根據(jù)權(quán)利要求6所述的一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特 征在于還定義“加速關(guān)閉文件_不刷新fat鏈表信息和目錄項(xiàng)信息”為文件打開函數(shù)的第 三個(gè)參數(shù),將該參數(shù)預(yù)先傳入到文件打開函數(shù)中后,系統(tǒng)則在不刷新fat鏈表信息和目錄 項(xiàng)信息的情況下直接將文件關(guān)閉。
8.根據(jù)權(quán)利要求7所述的一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,其特 征在于關(guān)閉時(shí)不需要刷新fat鏈表信息和目錄項(xiàng)信息的文件包括用來(lái)記錄固定的結(jié)構(gòu)信 息或是配置信息的系統(tǒng)文件。全文摘要
一種fat格式文件系統(tǒng)中加速打開/關(guān)閉文件的方法,包括以下步驟(1).打開文件,系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要讀取fat鏈表信息,如果是,則系統(tǒng)先讀取fat鏈表信息,再對(duì)文件進(jìn)行操作,然后轉(zhuǎn)入步驟(2);否則,直接對(duì)文件進(jìn)行操作,然后轉(zhuǎn)入步驟(3);(2).系統(tǒng)根據(jù)參數(shù)判斷該文件是否需要刷新目錄項(xiàng)信息,如果是,則系統(tǒng)先刷新目錄項(xiàng)信息,然后轉(zhuǎn)入步驟(3);否則,直接轉(zhuǎn)入步驟(3);(3).關(guān)閉文件。本發(fā)明有效提高了fat格式文件系統(tǒng)的文件打開/關(guān)閉的速度,從而提高操作效率。
文檔編號(hào)G06F17/30GK101882130SQ200910039279
公開日2010年11月10日 申請(qǐng)日期2009年5月7日 優(yōu)先權(quán)日2009年5月7日
發(fā)明者徐晶, 胡勝發(fā), 范敬才 申請(qǐng)人:安凱(廣州)微電子技術(shù)有限公司