專利名稱:一種文件合并方法及分解方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)的文件系統(tǒng)技術(shù),具體涉及一種文件合并方法及分解方法。
技術(shù)背景
隨著信息時(shí)代的到來,計(jì)算機(jī)已經(jīng)普及應(yīng)用到生活中的方方面面,而用戶的信息在計(jì)算機(jī)中的主要存儲(chǔ)方式是文件和文件夾。計(jì)算機(jī)中的文件是以計(jì)算機(jī)硬盤為載體存儲(chǔ)在計(jì)算機(jī)上的信息集合,文件可以是文本文檔、圖片、程序等等。文件通常具有三個(gè)字母的文件擴(kuò)展名,用于指示文件類型。計(jì)算機(jī)中的文件夾是用來協(xié)助人們管理計(jì)算機(jī)文件的,每一個(gè)文件夾對(duì)應(yīng)一塊磁盤空間,它提供了指向?qū)?yīng)空間的地址,它沒有擴(kuò)展名,也就不用擴(kuò)展名來標(biāo)識(shí)。文件夾一般采用多層次結(jié)構(gòu)(如樹狀結(jié)構(gòu)),文件夾不但可以包含文件,而且可包含下一級(jí)文件夾,這樣類推下去形成的多級(jí)文件架結(jié)構(gòu)既幫助了用戶將不同類型和功能的文件分類儲(chǔ)存,又方便文件查找,還允許不同文件夾中的文件擁有同樣的文件名。計(jì)算機(jī)的每個(gè)用戶、每個(gè)系統(tǒng)都在不時(shí)地跟文件/文件夾打交道。普通用戶或程序設(shè)計(jì)人員,很多時(shí)候都需要將多個(gè)文件和/或文件夾合并為一個(gè)文件來存放,在使用的時(shí)候再分解為原來的文件和/或文件夾。
在使用計(jì)算機(jī)中的文件或文件夾時(shí),我們一般會(huì)遇到以下的一些情況 1.對(duì)于一些瑣碎的小文件,用戶需要合并到一起,而在使用的時(shí)候再還原。
2.技術(shù)人員設(shè)計(jì)程序時(shí)不希望把程序的文件結(jié)構(gòu)和文件內(nèi)容展現(xiàn)給用戶,所以把所有內(nèi)容的文件夾和/或文件合并為一個(gè)文件,然后加密,使用時(shí)再通過程序把合并后的文件分解為原來的文件和/或文件夾。
3.現(xiàn)在免安裝的綠色版程序越來越多,這樣就需要把該綠色版程序的執(zhí)行程序跟內(nèi)容合并為一個(gè)文件,方便用戶傳播和無需安裝就可以使用。
4.技術(shù)人員在設(shè)計(jì)安裝程序時(shí)需要使用到文件和/或文件夾的合并技術(shù);程序安裝時(shí),再使用文件和/或文件夾的分解技術(shù),分解出部分或全部的文件和/或文件夾。
面對(duì)上述的文件和/或文件夾合并、分解需求,目前傳統(tǒng)的文件合并(不包括壓縮技術(shù))技術(shù),都只是簡(jiǎn)單地把需要合并的源文件(文件和/或文件夾)內(nèi)容以二進(jìn)制方式按照先后順序合并在一個(gè)目標(biāo)文件中,并在特定的位置(目標(biāo)文件的頭部、尾部或在每個(gè)源文件的開始位置或結(jié)束位置)記錄每個(gè)源文件的信息(源文件的相對(duì)路徑、字節(jié)數(shù)與偏移量)。 分解時(shí)先打開合并后的目標(biāo)文件,讀出目標(biāo)文件信息(每個(gè)源文件的字節(jié)數(shù)和偏移量)然后按照文件字節(jié)順序讀出每個(gè)源文件內(nèi)容,并在磁盤中生成源文件。這種傳統(tǒng)的文件合并、分解方法存在很多缺點(diǎn)第一,合并、分解的速度太慢,尤其是包含比較多的大文件時(shí); 第二,文件分解時(shí)必須按順序讀取合并后的目標(biāo)文件,才可以分解出源文件的結(jié)構(gòu)。
第三,文件分解只能整體分解,無法快速地分解出其中的某一個(gè)源文件或不分解目標(biāo)文件就直接使用其中一個(gè)源文件,即直接對(duì)目標(biāo)文件進(jìn)行分析,直接使用目標(biāo)文件中某個(gè)源文件的內(nèi)存數(shù)據(jù)。發(fā)明內(nèi)容
本發(fā)明解決的技術(shù)問題是克服現(xiàn)有技術(shù)的不足,提供一種提高文件合并速度的文件合并方法。
本發(fā)明還提供了一種提高文件分解速度,并能夠在合并后的目標(biāo)文件中對(duì)某個(gè)源文件進(jìn)行快速查找和分解的文件分解方法。
為解決上述技術(shù)問題,本發(fā)明的第一個(gè)發(fā)明目的是實(shí)現(xiàn)一種文件合并方法,其采用的技術(shù)方案如下一種文件合并方法,包括如下步驟進(jìn)行文件合并,遍歷讀取源文件,形成源文件標(biāo)記信息并存儲(chǔ)到樹形結(jié)構(gòu)中; 創(chuàng)建目標(biāo)文件及相應(yīng)的內(nèi)存映射文件;具體是根據(jù)源文件的總字節(jié)數(shù)、存儲(chǔ)樹形結(jié)構(gòu)所占的字節(jié)數(shù)再加4個(gè)字節(jié)(用來存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容的大小)創(chuàng)建目標(biāo)文件及相應(yīng)的內(nèi)存映射文件;把存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)和樹形結(jié)構(gòu)的內(nèi)容作為文件頭信息先后寫入到內(nèi)存映射文件開始位置;根據(jù)樹形結(jié)構(gòu)將源文件的內(nèi)容寫入到內(nèi)存映射文件中,寫入的位置從存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容之后開始;寫操作結(jié)束后,關(guān)閉內(nèi)存映射文件,形成的目標(biāo)文件即是合并文件。
本發(fā)明使用內(nèi)存映射文件技術(shù)建立目標(biāo)文件(即合并后的文件)與地址進(jìn)程空間的映射,然后對(duì)源文件、目標(biāo)文件進(jìn)行讀寫分析,能讓應(yīng)用程序使用內(nèi)存操作來操縱文件, 而不必要在文件里來回地讀、寫、移動(dòng)文件指針,并采用樹形結(jié)構(gòu)存儲(chǔ)源文件的標(biāo)記信息, 根據(jù)樹形結(jié)構(gòu)將源文件的內(nèi)容寫入到內(nèi)存映射文件中,大大提高了文件合并的速度。
上述方案中,根據(jù)樹形結(jié)構(gòu)將源文件的內(nèi)容寫入到內(nèi)存映射文件中的具體步驟包括根據(jù)當(dāng)前分配的線程數(shù)C創(chuàng)建C個(gè)用于記錄源文件序列的線程列表Lp ; 遍歷樹形結(jié)構(gòu)獲取每個(gè)源文件的標(biāo)記信息和每個(gè)源文件的遍歷路徑,并將源文件標(biāo)記信息中每個(gè)源文件的字節(jié)數(shù)作為關(guān)鍵字利用冒泡排序法將源文件排序,并根據(jù)排序結(jié)果將每個(gè)源文件的標(biāo)記信息和遍歷路徑作為一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在數(shù)據(jù)列表Lf中;根據(jù)源文件的總字節(jié)數(shù)S計(jì)算出每個(gè)線程需要處理的平均字節(jié)數(shù)V= S/C ; 根據(jù)平均字節(jié)數(shù)將數(shù)據(jù)列表Lf中每個(gè)源文件的標(biāo)記信息、遍歷路徑以及文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu)逐一循環(huán)壓入到C個(gè)線程列表Lp中;壓入時(shí),若某個(gè)源文件的字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),則將所述某個(gè)源文件的內(nèi)容分成C個(gè)部分以生成C個(gè)文件拆分標(biāo)記信息,再將所述某個(gè)源文件的標(biāo)記信息和遍歷路徑對(duì)應(yīng)一個(gè)文件拆分標(biāo)記信息形成C個(gè)數(shù)據(jù)結(jié)構(gòu)按順序分別壓入到C個(gè)線程列表Lp中,若源文件的字節(jié)數(shù)小于平均字節(jié)數(shù)V時(shí), 則源文件不需拆分,且不需要填充其所對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的文件拆分標(biāo)記信息;當(dāng)某個(gè)線程列表Lp中源文件的總字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),不再對(duì)所述某個(gè)線程列表Lp進(jìn)行源文件分配,并進(jìn)入下一個(gè)線程列表Lp中進(jìn)行判斷及分配;C個(gè)線程根據(jù)線程列表Lp中的分配結(jié)果同步將源文件寫入到內(nèi)存映射文件中。
采用上述的線程分配方法,把需要合并的源文件的數(shù)據(jù)平均分配到各個(gè)線程中,使若干線程同步處理源文件的合并,更進(jìn)一步地提高了源文件的分解速度。
上述方案中,寫入頭文件信息時(shí),把存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)寫在內(nèi)存映射文件的開始位置處,其占4個(gè)字節(jié),再把樹形結(jié)構(gòu)的內(nèi)容采用孩子兄弟鏈表表示法從內(nèi)存映射文件的第5個(gè)字節(jié)處開始寫入。
上述方案中,所述源文件為文件夾和/或文件;所述源文件標(biāo)記信息包括文件夾名稱、文件名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量。
上述方案中,樹形結(jié)構(gòu)為多叉樹結(jié)構(gòu),多叉樹中根節(jié)點(diǎn)和分支節(jié)點(diǎn)存儲(chǔ)文件夾名稱,多叉樹中的葉子節(jié)點(diǎn)存儲(chǔ)文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量,若所述源文件為若干個(gè)文件夾時(shí),多叉樹的根節(jié)點(diǎn)的文件夾名稱設(shè)置為空;所述多叉樹的分支節(jié)點(diǎn)為度大于0的樹節(jié)點(diǎn),多叉樹的葉子節(jié)點(diǎn)為度等于0的樹節(jié)占.^ \\\ 所述文件拆分標(biāo)記信息是把源文件的內(nèi)容平均分為C個(gè)部分后每部分的標(biāo)記信息, 其包括源文件所分塊數(shù)、每部分的索引值、每部分的字節(jié)數(shù)、每部分在被拆分源文件中的位置。
本發(fā)明的第二個(gè)發(fā)明目的是實(shí)現(xiàn)一種文件分解方法,其采用的技術(shù)方案如下 一種文件分解方法,包括采用權(quán)利要求1所述的合并方法合并的目標(biāo)文件,包括如下步驟分解目標(biāo)文件,根據(jù)目標(biāo)文件創(chuàng)建內(nèi)存映射文件; 讀取內(nèi)存映射文件的頭信息,生成對(duì)應(yīng)的樹形結(jié)構(gòu);分解獲取全部源文件時(shí),根據(jù)樹形結(jié)構(gòu)中的節(jié)點(diǎn)信息,讀取內(nèi)存映射文件中的內(nèi)存塊, 然后生成所有源文件;分解獲取目標(biāo)文件中的單個(gè)源文件時(shí),通過遍歷算法在樹形結(jié)構(gòu)中找到并讀取所述單個(gè)源文件的標(biāo)記信息;根據(jù)獲取的單個(gè)源文件標(biāo)記信息在內(nèi)存映射文件中讀出所述單個(gè)源文件的內(nèi)容并在硬盤指定位置生成所述單個(gè)源文件,或者讀出所述單個(gè)源文件的內(nèi)容到內(nèi)存中直接使用。
該技術(shù)方案使用內(nèi)存映射文件技術(shù)建立目標(biāo)文件(即合并后的文件)與地址進(jìn)程空間的映射,然后對(duì)源文件、目標(biāo)文件進(jìn)行讀寫分析,能讓應(yīng)用程序使用內(nèi)存操作來操縱文件,而不必要在文件里來回地讀、寫、移動(dòng)文件指針,并采用樹形結(jié)構(gòu)提取源文件的信息,大大提高了文件分解的速度。而且本技術(shù)方案進(jìn)行分解時(shí)不必按順序讀取合并后的目標(biāo)文件就可以分解出源文件的結(jié)構(gòu),而且當(dāng)需要目標(biāo)文件中的某個(gè)源文件時(shí)無需分解整個(gè)目標(biāo)文件,就可以快速地從目標(biāo)文件中分解出某一個(gè)源文件或不分解目標(biāo)文件就直接使用某一個(gè)源文件,即直接對(duì)目標(biāo)文件進(jìn)行分析,直接使用目標(biāo)文件中某個(gè)源文件的內(nèi)存數(shù)據(jù),極大地方便了用戶對(duì)文件的操作。
上述方案中,分解獲取全部源文件時(shí),根據(jù)樹形結(jié)構(gòu)中的節(jié)點(diǎn)信息,讀取內(nèi)存映射文件中的內(nèi)存塊,然后生成所有源文件的具體步驟包括根據(jù)當(dāng)前分配的線程數(shù)C創(chuàng)建用于C個(gè)記錄源文件序列的線程列表Lp ; 遍歷樹形結(jié)構(gòu)獲取每個(gè)源文件的標(biāo)記信息和每個(gè)源文件的遍歷路徑,并將標(biāo)記信息中源文件的字節(jié)數(shù)作為關(guān)鍵字,利用冒泡排序法將源文件排序,并根據(jù)排序結(jié)果將每個(gè)源文件的標(biāo)記信息和遍歷路徑作為一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在數(shù)據(jù)列表Lf中;7根據(jù)目標(biāo)文件的總字節(jié)數(shù)S計(jì)算出每個(gè)線程需要處理的平均字節(jié)數(shù)V = S/C; 根據(jù)平均字節(jié)數(shù)將數(shù)據(jù)列表Lf中每個(gè)源文件的標(biāo)記信息、遍歷路徑以及文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu)逐一循環(huán)壓入到C個(gè)線程列表Lp中;壓入時(shí),若某個(gè)源文件的字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),則將所述某個(gè)源文件的內(nèi)容分成C個(gè)部分以生成C個(gè)拆分標(biāo)記信息,再將所述某個(gè)源文件的標(biāo)記信息和遍歷路徑對(duì)應(yīng)一個(gè)文件拆分標(biāo)記信息形成C個(gè)數(shù)據(jù)結(jié)構(gòu)按順序分別壓入到C個(gè)線程列表Lp中,若源文件的字節(jié)數(shù)小于平均字節(jié)數(shù)V時(shí),則源文件不需拆分,且不需要填充其所對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的文件拆分標(biāo)記信息;當(dāng)某個(gè)線程列表Lp 中源文件的總字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),不再對(duì)所述某個(gè)線程列表Lp進(jìn)行源文件分配, 并進(jìn)入下一個(gè)線程列表Lp中進(jìn)行判斷及分配;C個(gè)線程根據(jù)線程列表Lp中的分配結(jié)果同步生成對(duì)應(yīng)的源文件。
采用上述的線程分配方法,把需要目標(biāo)文件中的數(shù)據(jù)平均分配到各個(gè)線程中,使若干線程同步處理目標(biāo)文件的分解,更進(jìn)一步地提高了源文件的分解速度。
上述方案中,所述樹形結(jié)構(gòu)為多叉樹結(jié)構(gòu),源文件為文件夾和/或文件。
上述方案中,所述內(nèi)存映射文件的頭信息包括樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)和樹形結(jié)構(gòu)的內(nèi)容,樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)位于內(nèi)存映射文件的開始位置處,其占4個(gè)字節(jié), 樹形結(jié)構(gòu)位于內(nèi)存映射文件的開始位置處,其從第5個(gè)字節(jié)開始;所述樹形結(jié)構(gòu)的內(nèi)容為目標(biāo)文件中源文件的標(biāo)記信息,包括文件夾名稱、文件的名稱、 文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量;生成多叉樹時(shí),多叉樹中根節(jié)點(diǎn)和分支節(jié)點(diǎn)存儲(chǔ)文件夾名稱,多叉樹中的葉子節(jié)點(diǎn)存儲(chǔ)文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量,若所述源文件為若干個(gè)文件夾時(shí),多叉樹的根節(jié)點(diǎn)的文件夾名稱設(shè)置為空;所述多叉樹的分支節(jié)點(diǎn)為度大于0的樹節(jié)點(diǎn), 多叉樹的葉子節(jié)點(diǎn)為度等于0的樹節(jié)點(diǎn)。
上述方案中,分解獲取目標(biāo)文件中的單個(gè)源文件時(shí),通過遍歷查找樹形結(jié)構(gòu)獲取的的單個(gè)源文件標(biāo)記信息是單個(gè)源文件的字節(jié)數(shù)和其在內(nèi)存映射文件中的偏移量;所述文件拆分標(biāo)記信息是把源文件的內(nèi)容平均分為C個(gè)部分后每部分的標(biāo)記信息, 其包括源文件所分塊數(shù)、每部分的索引值、每部分的字節(jié)數(shù)、每部分在被拆分源文件中的位置。
與現(xiàn)有技術(shù)相比,本發(fā)明技術(shù)方案的有益效果是本發(fā)明使用內(nèi)存映射文件技術(shù)建立目標(biāo)文件(即合并后文件)與地址進(jìn)程空間的映射, 然后進(jìn)行讀寫分析,能讓應(yīng)用程序使用內(nèi)存操作來操縱文件,而不必要在文件里來回地讀、 寫、移動(dòng)文件指針。并使用樹型結(jié)構(gòu)存儲(chǔ)需要合并的源文件的標(biāo)記或者分解的目標(biāo)文件的頭文件信息,然后采用任務(wù)的多線程平均分配,把這些需要操作的源文件或目標(biāo)文件平均分配到各個(gè)線程中去,多線程來同步處理文件的合并或分解,大大提高了文件的合并或分解速度,而且目標(biāo)文件分解時(shí)不必按順序讀取合并后的目標(biāo)文件就可以分解出源文件的結(jié)構(gòu),而且當(dāng)需要目標(biāo)文件中的某個(gè)源文件時(shí)無需分解整個(gè)目標(biāo)文件,就可以快速地從目標(biāo)文件中分解出某一個(gè)源文件或不分解目標(biāo)文件就直接使用某一個(gè)源文件,即直接對(duì)目標(biāo)文件進(jìn)行分析,直接使用目標(biāo)文件中某個(gè)源文件的內(nèi)存數(shù)據(jù),極大地方便了用戶對(duì)文件的操作。
圖1為本發(fā)明中一種文件合并方法的流程圖; 圖2為本發(fā)明中生成樹形結(jié)構(gòu)的示意圖;圖3為本發(fā)明樹形結(jié)構(gòu)存儲(chǔ)在內(nèi)存映射文件中的示意圖; 圖4為本發(fā)明多叉樹向二叉樹轉(zhuǎn)變的過程示意圖; 圖5為本發(fā)明中一種文件分解方法的流程圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的說明。
如圖1所示,本發(fā)明公開了一種文件合并方法,包括如下步驟(SOl)進(jìn)行文件合并,遍歷讀取源文件,形成標(biāo)記信息并存儲(chǔ)到樹形結(jié)構(gòu)中; 源文件為文件夾和/或文件,其可以是多個(gè)文件進(jìn)行合并,也可以是一個(gè)或者多個(gè)文件夾進(jìn)行合并,也可以是一個(gè)或者多個(gè)文件夾和文件進(jìn)行合并。源文件標(biāo)記信息包括文件夾名稱、文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量。樹形結(jié)構(gòu)為多叉樹,遍歷時(shí)提取源文件的目錄進(jìn)行讀取,多叉樹中根節(jié)點(diǎn)和分支節(jié)點(diǎn)存儲(chǔ)文件夾名稱,葉子節(jié)點(diǎn)存儲(chǔ)文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量,若源文件為若干個(gè)文件夾時(shí),多叉樹中的根節(jié)點(diǎn)的文件夾名稱設(shè)置為空,其中多叉樹的分支節(jié)點(diǎn)為度大于0的樹節(jié)點(diǎn),多叉樹的葉子節(jié)點(diǎn)為度等于0的樹節(jié)點(diǎn)。
(S02)創(chuàng)建目標(biāo)文件和相應(yīng)的內(nèi)存映射文件;具體是根據(jù)源文件的總字節(jié)數(shù)、存儲(chǔ)樹形結(jié)構(gòu)所占的字節(jié)數(shù)再加4個(gè)字節(jié)(用來存儲(chǔ)樹形結(jié)構(gòu)字節(jié)的大小)創(chuàng)建目標(biāo)文件及相應(yīng)的內(nèi)存映射文件;然后建立目標(biāo)文件與地址進(jìn)程空間的映射,然后進(jìn)行讀寫分析,能讓應(yīng)用程序使用內(nèi)存操作來操縱文件,而不必要在文件里來回地讀、寫、移動(dòng)文件指針。
(S03)把存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)和樹形結(jié)構(gòu)的內(nèi)容作為文件頭信息先后寫入到內(nèi)存映射文件開始位置。首先把存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)寫在內(nèi)存映射文件的開始位置處,其占4個(gè)字節(jié)。然后再把樹形結(jié)構(gòu)的內(nèi)容采用孩子兄弟鏈表表示法從內(nèi)存映射文件的第5個(gè)字節(jié)處開始寫入;(S04)根據(jù)樹形結(jié)構(gòu)將源文件內(nèi)容寫入到內(nèi)存映射文件中,寫入時(shí)從存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容之后開始,其具體步驟為(5041)根據(jù)當(dāng)前分配的線程數(shù)C創(chuàng)建C個(gè)線程列表Lp,線程列表Lp用于記錄需要某個(gè)線程來處理的源文件序列,其中C = CPU個(gè)數(shù)X2,P=l,2…C,線程列表、中存儲(chǔ)的內(nèi)容為需處理的文件夾名稱、文件的名稱、、文件字節(jié)數(shù)、文件在目標(biāo)文件中的偏移量、遍歷路徑以及文件拆分標(biāo)記信息,遍歷路徑為源文件相對(duì)于根目錄文件夾的相對(duì)路徑;(5042)遍歷樹形結(jié)構(gòu)獲取每個(gè)源文件的標(biāo)記信息和每個(gè)源文件的遍歷路徑,并將源文件標(biāo)記信息中每個(gè)源文件的字節(jié)數(shù)作為關(guān)鍵字利用冒泡排序法將源文件排序,并根據(jù)排序結(jié)果將每個(gè)源文件的標(biāo)記信息和遍歷路徑作為一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在數(shù)據(jù)列表Lf中,遍歷路徑表明了文件夾與子文件夾/子文件之間的包含關(guān)系;(5043)根據(jù)源文件的總字節(jié)數(shù)S計(jì)算每個(gè)線程需要處理的平均字節(jié)數(shù)V= S/C;(5044)根據(jù)平均字節(jié)數(shù)將數(shù)據(jù)列表Lf中每個(gè)源文件的標(biāo)記信息、遍歷路徑以及文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu)逐一循環(huán)壓入到C個(gè)線程列表、中;壓入時(shí),若第N個(gè)源文件9的字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),則根據(jù)第N個(gè)源文件的字節(jié)數(shù)和線程列表的個(gè)數(shù)C將第N個(gè)源文件的內(nèi)容分成C個(gè)部分以生成C個(gè)文件拆分標(biāo)記信息,再將第N個(gè)源文件的標(biāo)記信息和遍歷路徑對(duì)應(yīng)一個(gè)文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu),這樣就構(gòu)成C個(gè)數(shù)據(jù)結(jié)構(gòu),再將這C個(gè)數(shù)據(jù)結(jié)構(gòu)按順序分別壓入到C個(gè)線程列表Lp中,若源文件的字節(jié)數(shù)小于平均字節(jié)數(shù)V時(shí),則源文件不需拆分,且不需要填充其所對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的文件拆分標(biāo)記信息;當(dāng)?shù)?M個(gè)線程列表中源文件的總字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),不再對(duì)第M個(gè)線程列表進(jìn)行源文件分配,并進(jìn)入第M+1個(gè)線程列表中進(jìn)行判斷及分配;拆分標(biāo)記信息標(biāo)記了源文件所分塊數(shù), 被拆分源文件每部分的索引值,每部分包含被拆分源文件的字節(jié)數(shù)以及每部分在完整的源文件中的位置。
(S045) C個(gè)線程根據(jù)分配結(jié)果同步將源文件寫入到內(nèi)存映射文件中。
(S05)寫操作結(jié)束后,關(guān)閉內(nèi)存映射文件,形成的目標(biāo)文件既是合并文件。
下面結(jié)合圖2、3和4以及具體實(shí)施例對(duì)本發(fā)明中文件合并時(shí)生成樹形結(jié)構(gòu)以及將樹形結(jié)構(gòu)內(nèi)容存儲(chǔ)到內(nèi)存映射文件中的具體步驟進(jìn)行進(jìn)一步的說明。如現(xiàn)需要將文件夾A 合并成一個(gè)目標(biāo)文件,其中文件夾A中包括子文件夾B、C、D,子文件B包括文件E和F,子文件夾C包括文件G,子文件D包括文件H、I和J。其具體步驟為(1)如圖2所示,首先對(duì)該文件夾A進(jìn)行合并,對(duì)文件夾A進(jìn)行遍歷讀取,其是根據(jù)文件夾A的目錄進(jìn)行的,遍歷獲知文件夾A中包括子文件夾B、C、D,子文件B包括文件E和F,子文件夾C包括文件G,子文件D包括文件H、I和J,此時(shí)提取文件夾A的信息,具體是,提取文件夾A的文件夾名稱A存儲(chǔ)在多叉樹的根節(jié)點(diǎn)1中,提取文件夾B、C、D的文件夾名稱B、 C、D分別存儲(chǔ)在多叉樹的節(jié)點(diǎn)2、3和4中,提取文件E、F、G、H、I、J的文件名稱E、F、G、H、 I、J以及各個(gè)文件的字節(jié)數(shù)、各個(gè)文件在目標(biāo)文件中的偏移量存儲(chǔ)在多叉樹的葉子節(jié)點(diǎn)5、 6、7、8、9、和 10 中。
(2)根據(jù)各個(gè)文件的字節(jié)數(shù)得到文件夾A的總字節(jié)數(shù)以及存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)、以及再加上4個(gè)字節(jié)存儲(chǔ)表示樹形結(jié)構(gòu)內(nèi)容大小的數(shù)據(jù)創(chuàng)建目標(biāo)文件和相應(yīng)的內(nèi)存映射文件。
( 3)將存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)存儲(chǔ)到內(nèi)存映射文件的開始位置處,其占4 個(gè)字節(jié)。然后再把樹形結(jié)構(gòu)的內(nèi)容采用孩子兄弟鏈表表示法從內(nèi)存映射文件的第5個(gè)字節(jié)處開始寫入,如圖3所示。
多叉樹結(jié)構(gòu)存儲(chǔ)在目標(biāo)文件中,為了保證合并成的目標(biāo)文件具有被讀取出來還原出源文件的功能,需要將樹形結(jié)構(gòu)以二叉樹的形式存儲(chǔ),孩子兄弟鏈表表示法可以理解為多叉樹向二叉樹轉(zhuǎn)換的過程,如圖4所示。遍歷的過程就是通過該孩子兄弟鏈表進(jìn)行先后遍歷,將遍歷結(jié)果為ABEAFAACGAADHA Ι Λ J ΛΛΛΛ存儲(chǔ)在內(nèi)存映射文件中。 當(dāng)從內(nèi)存映射文件中讀取遍歷結(jié)果再轉(zhuǎn)換成樹形結(jié)構(gòu)的過程與圖4所示的過程相反。
如圖5所示,本發(fā)明的第二個(gè)發(fā)明目的是實(shí)現(xiàn)一種文件分解方法,其包括通過上述合并方法合并的目標(biāo)文件,包括如下步驟(Sl 1)分解目標(biāo)文件,根據(jù)目標(biāo)文件創(chuàng)建內(nèi)存映射文件;以建立目標(biāo)文件與地址進(jìn)程空間的映射,然后進(jìn)行讀寫分析,能讓應(yīng)用程序使用內(nèi)存操作來操縱文件,而不必要在文件里來回地讀、寫、移動(dòng)文件指針。
(S12)讀取內(nèi)存映射文件的頭信息,生成對(duì)應(yīng)的樹形結(jié)構(gòu);內(nèi)存映射文件的頭信息包括樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)和樹形結(jié)構(gòu)的內(nèi)容;首先,讀取內(nèi)存映射文件的前四個(gè)字節(jié)存儲(chǔ)的內(nèi)容,所述內(nèi)容即為樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù),根據(jù)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù),再從內(nèi)存映射文件的第5個(gè)字節(jié)開始讀取目標(biāo)文件的樹形結(jié)構(gòu)內(nèi)容生成對(duì)應(yīng)的樹形結(jié)構(gòu);樹形結(jié)構(gòu)的內(nèi)容為目標(biāo)文件中源文件的標(biāo)記信息,包括文件夾名稱、文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量;樹形結(jié)構(gòu)為多叉樹結(jié)構(gòu),生成多叉樹時(shí),多叉樹中根節(jié)點(diǎn)和分支節(jié)點(diǎn)存儲(chǔ)文件夾名稱, 多叉樹中的葉子節(jié)點(diǎn)存儲(chǔ)文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量,若所述源文件為若干個(gè)文件夾時(shí),多叉樹的根節(jié)點(diǎn)的文件夾名稱設(shè)置為空;所述多叉樹的分支節(jié)點(diǎn)為度大于0的樹節(jié)點(diǎn),多叉樹的葉子節(jié)點(diǎn)為度等于0的樹節(jié)點(diǎn)。
之后,若分解全部源文件則執(zhí)行步驟(S13),若分解單個(gè)源文件則執(zhí)行步驟 (S14)。
(S13)若分解全部源文件時(shí),根據(jù)樹形結(jié)構(gòu)中的節(jié)點(diǎn)信息,讀取內(nèi)存映射文件中的內(nèi)存塊,然后逐生成所有源文件;其具體步驟包括(5131)根據(jù)當(dāng)前分配的線程數(shù)C創(chuàng)建C個(gè)線程列表Lp,線程列表Lp用于記錄目標(biāo)文件中需要某個(gè)線程來處理的源文件序列,其中C = CPU個(gè)數(shù)X2,P=l,2…C,線程列表、中存儲(chǔ)的結(jié)點(diǎn)包含內(nèi)容為需處理的各源文件名稱、文件字節(jié)數(shù)、文件在目標(biāo)文件中的偏移量、 遍歷路徑以及源文件的拆分標(biāo)記信息,遍歷路徑即為源文件相對(duì)于根目錄文件夾的相對(duì)路徑;(5132)遍歷樹形結(jié)構(gòu)獲取每個(gè)源文件的標(biāo)記信息,并將標(biāo)記信息中源文件的字節(jié)數(shù)作為關(guān)鍵字,利用冒泡排序法源文件排序并根據(jù)排序結(jié)果將每個(gè)源文件的標(biāo)記信息和遍歷路徑作為一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在數(shù)據(jù)列表Lf中;(5133)根據(jù)目標(biāo)文件的總字節(jié)數(shù)S計(jì)算出每個(gè)線程需要處理的平均字節(jié)數(shù)V= S/C ;(5134)根據(jù)平均字節(jié)數(shù)將數(shù)據(jù)列表Lf中每個(gè)源文件的標(biāo)記信息、遍歷路徑以及文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu)逐一循環(huán)壓入到C個(gè)線程列表、中;壓入時(shí),若第N個(gè)源文件的字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),則根據(jù)第N個(gè)源文件的字節(jié)數(shù)和線程列表的個(gè)數(shù)C將第N個(gè)源文件的內(nèi)容分成C個(gè)部分以生成C個(gè)文件拆分標(biāo)記信息,再將第N個(gè)源文件的標(biāo)記信息和遍歷路徑對(duì)應(yīng)一個(gè)文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu),這樣就構(gòu)成C個(gè)數(shù)據(jù)結(jié)構(gòu),再將這C個(gè)數(shù)據(jù)結(jié)構(gòu)按順序分別壓入到C個(gè)線程列表Lp中,若源文件的字節(jié)數(shù)小于平均字節(jié)數(shù)V時(shí),則源文件不需拆分,且不需要填充其所對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的文件拆分標(biāo)記信息;當(dāng)?shù)?M個(gè)線程列表中源文件的總字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),不再對(duì)第M個(gè)線程列表進(jìn)行源文件分配,并進(jìn)入第M+1個(gè)線程列表中進(jìn)行判斷及分配;拆分標(biāo)記信息標(biāo)記了源文件所分塊數(shù), 被拆分源文件每部分的索引值,每部分包含被拆分源文件的字節(jié)數(shù)以及每部分在完整的源文件中的位置;(5135)C個(gè)線程根據(jù)線程列表Lp中的分配結(jié)果同步生成對(duì)應(yīng)的源文件。
(S14)分解目標(biāo)文件中的單個(gè)源文件時(shí),此時(shí)無需分解整個(gè)目標(biāo)文件,只需對(duì)目標(biāo)文件中單個(gè)源文件進(jìn)行分解,其具體步驟為(S141)通過樹的先序遍歷算法,在樹形結(jié)構(gòu)中找到并讀取單個(gè)源文件標(biāo)記信息,包括文件夾名稱、文件名稱、文件大小、源文件在目標(biāo)文件中的偏移量;(S142)根據(jù)單個(gè)源文件標(biāo)記信息,具體是單個(gè)源文件在目標(biāo)文件中的偏移量以及單個(gè)源文件的字節(jié)數(shù),在內(nèi)存映射文件中讀出單個(gè)源文件的內(nèi)容并在硬盤指定位置生成單個(gè)源文件,或者讀出單個(gè)源文件的內(nèi)容到內(nèi)存中直接使用。
權(quán)利要求
1.一種文件合并方法,其特征在于,包括如下步驟進(jìn)行文件合并,遍歷讀取源文件,形成源文件標(biāo)記信息并存儲(chǔ)到樹形結(jié)構(gòu)中; 創(chuàng)建目標(biāo)文件及相應(yīng)的內(nèi)存映射文件;把存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)和樹形結(jié)構(gòu)的內(nèi)容作為文件頭信息先后寫入到內(nèi)存映射文件開始位置;根據(jù)樹形結(jié)構(gòu)將源文件的內(nèi)容寫入到內(nèi)存映射文件中,寫入的位置從存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容之后開始;寫操作結(jié)束后,關(guān)閉內(nèi)存映射文件,形成的目標(biāo)文件即是合并文件。
2.根據(jù)權(quán)利要求1所述的文件合并方法,其特征在于,根據(jù)樹形結(jié)構(gòu)將源文件的內(nèi)容寫入到內(nèi)存映射文件中的具體步驟包括根據(jù)當(dāng)前分配的線程數(shù)C創(chuàng)建C個(gè)用于記錄源文件序列的線程列表Lp ; 遍歷樹形結(jié)構(gòu)獲取每個(gè)源文件的標(biāo)記信息和每個(gè)源文件的遍歷路徑,并將源文件標(biāo)記信息中每個(gè)源文件的字節(jié)數(shù)作為關(guān)鍵字利用冒泡排序法將源文件排序,并根據(jù)排序結(jié)果將每個(gè)源文件的標(biāo)記信息和遍歷路徑作為一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在數(shù)據(jù)列表Lf中;根據(jù)源文件的總字節(jié)數(shù)S計(jì)算出每個(gè)線程需要處理的平均字節(jié)數(shù)V= S/C ; 根據(jù)平均字節(jié)數(shù)將數(shù)據(jù)列表Lf中每個(gè)源文件的標(biāo)記信息、遍歷路徑以及文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu)逐一循環(huán)壓入到C個(gè)線程列表Lp中;壓入時(shí),若某個(gè)源文件的字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),則將所述某個(gè)源文件的內(nèi)容分成C個(gè)部分以生成C個(gè)文件拆分標(biāo)記信息,再將所述某個(gè)源文件的標(biāo)記信息和遍歷路徑對(duì)應(yīng)一個(gè)文件拆分標(biāo)記信息形成C個(gè)數(shù)據(jù)結(jié)構(gòu)按順序分別壓入到C個(gè)線程列表Lp中,若源文件的字節(jié)數(shù)小于平均字節(jié)數(shù)V時(shí), 則源文件不需拆分,且不需要填充其所對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的文件拆分標(biāo)記信息;當(dāng)某個(gè)線程列表Lp中源文件的總字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),不再對(duì)所述某個(gè)線程列表Lp進(jìn)行源文件分配,并進(jìn)入下一個(gè)線程列表Lp中進(jìn)行判斷及分配;C個(gè)線程根據(jù)線程列表Lp中的分配結(jié)果同步將源文件寫入到內(nèi)存映射文件中。
3.根據(jù)權(quán)利要求1所述的文件合并方法,其特征在于,寫入頭文件信息時(shí),把存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)寫在內(nèi)存映射文件的開始位置處,其占4個(gè)字節(jié),再把樹形結(jié)構(gòu)的內(nèi)容采用孩子兄弟鏈表表示法從內(nèi)存映射文件的第5個(gè)字節(jié)處開始寫入。
4.根據(jù)權(quán)利要求1所述的文件合并方法,其特征在于,所述源文件為文件夾和/或文件;所述源文件標(biāo)記信息包括文件夾名稱、文件名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量。
5.根據(jù)權(quán)利要求4所述的文件合并方法,其特征在于,樹形結(jié)構(gòu)為多叉樹結(jié)構(gòu),多叉樹中根節(jié)點(diǎn)和分支節(jié)點(diǎn)存儲(chǔ)文件夾名稱,多叉樹中的葉子節(jié)點(diǎn)存儲(chǔ)文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量,若所述源文件為若干個(gè)文件夾時(shí),多叉樹的根節(jié)點(diǎn)的文件夾名稱設(shè)置為空;所述多叉樹的分支節(jié)點(diǎn)為度大于0的樹節(jié)點(diǎn),多叉樹的葉子節(jié)點(diǎn)為度等于0的樹節(jié)占.所述文件拆分標(biāo)記信息是把源文件的內(nèi)容平均分為C個(gè)部分后每部分的標(biāo)記信息, 其包括源文件所分塊數(shù)、每部分的索引值、每部分的字節(jié)數(shù)、每部分在被拆分源文件中的位置。
6.一種文件分解方法,包括采用權(quán)利要求1所述的合并方法合并的目標(biāo)文件,其特征在于,包括如下步驟分解目標(biāo)文件,根據(jù)目標(biāo)文件創(chuàng)建內(nèi)存映射文件; 讀取內(nèi)存映射文件的頭信息,生成對(duì)應(yīng)的樹形結(jié)構(gòu);分解獲取全部源文件時(shí),根據(jù)樹形結(jié)構(gòu)中的節(jié)點(diǎn)信息,讀取內(nèi)存映射文件中的內(nèi)存塊, 然后生成所有源文件;分解獲取目標(biāo)文件中的單個(gè)源文件時(shí),通過遍歷算法在樹形結(jié)構(gòu)中找到并讀取所述單個(gè)源文件的標(biāo)記信息;根據(jù)獲取的單個(gè)源文件標(biāo)記信息在內(nèi)存映射文件中讀出所述單個(gè)源文件的內(nèi)容并在硬盤指定位置生成所述單個(gè)源文件,或者讀出所述單個(gè)源文件的內(nèi)容到內(nèi)存中直接使用。
7.根據(jù)權(quán)利要求6所述的文件分解方法,其特征在于,分解獲取全部源文件時(shí),根據(jù)樹形結(jié)構(gòu)中的節(jié)點(diǎn)信息,讀取內(nèi)存映射文件中的內(nèi)存塊,然后生成所有源文件的具體步驟包括根據(jù)當(dāng)前分配的線程數(shù)C創(chuàng)建用于C個(gè)記錄源文件序列的線程列表Lp ; 遍歷樹形結(jié)構(gòu)獲取每個(gè)源文件的標(biāo)記信息和每個(gè)源文件的遍歷路徑,并將標(biāo)記信息中源文件的字節(jié)數(shù)作為關(guān)鍵字,利用冒泡排序法將源文件排序,并根據(jù)排序結(jié)果將每個(gè)源文件的標(biāo)記信息和遍歷路徑作為一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在數(shù)據(jù)列表Lf中;根據(jù)目標(biāo)文件的總字節(jié)數(shù)S計(jì)算出每個(gè)線程需要處理的平均字節(jié)數(shù)V = S/C; 根據(jù)平均字節(jié)數(shù)將數(shù)據(jù)列表Lf中每個(gè)源文件的標(biāo)記信息、遍歷路徑以及文件拆分標(biāo)記信息作為一個(gè)數(shù)據(jù)結(jié)構(gòu)逐一循環(huán)壓入到C個(gè)線程列表Lp中;壓入時(shí),若某個(gè)源文件的字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),則將所述某個(gè)源文件的內(nèi)容分成C個(gè)部分以生成C個(gè)拆分標(biāo)記信息,再將所述某個(gè)源文件的標(biāo)記信息和遍歷路徑對(duì)應(yīng)一個(gè)文件拆分標(biāo)記信息形成C個(gè)數(shù)據(jù)結(jié)構(gòu)按順序分別壓入到C個(gè)線程列表Lp中,若源文件的字節(jié)數(shù)小于平均字節(jié)數(shù)V時(shí),則源文件不需拆分,且不需要填充其所對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的文件拆分標(biāo)記信息;當(dāng)某個(gè)線程列表Lp 中源文件的總字節(jié)數(shù)大于平均字節(jié)數(shù)V時(shí),不再對(duì)所述某個(gè)線程列表Lp進(jìn)行源文件分配, 并進(jìn)入下一個(gè)線程列表Lp中進(jìn)行判斷及分配;C個(gè)線程根據(jù)線程列表Lp中的分配結(jié)果同步生成對(duì)應(yīng)的源文件。
8.根據(jù)權(quán)利要求7所述的文件分解方法,其特征在于,所述樹形結(jié)構(gòu)為多叉樹結(jié)構(gòu),源文件為文件夾和/或文件。
9.根據(jù)權(quán)利要求8所述的文件分解方法,其特征在于,所述內(nèi)存映射文件的頭信息包括樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)和樹形結(jié)構(gòu)的內(nèi)容,樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)位于內(nèi)存映射文件的開始位置處,其占4個(gè)字節(jié),樹形結(jié)構(gòu)位于內(nèi)存映射文件的開始位置處,其從第5 個(gè)字節(jié)開始;所述樹形結(jié)構(gòu)的內(nèi)容為目標(biāo)文件中源文件的標(biāo)記信息,包括文件夾名稱、文件的名稱、 文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量;生成多叉樹時(shí),多叉樹中根節(jié)點(diǎn)和分支節(jié)點(diǎn)存儲(chǔ)文件夾名稱,多叉樹中的葉子節(jié)點(diǎn)存儲(chǔ)文件的名稱、文件字節(jié)數(shù)和文件在目標(biāo)文件中的偏移量,若所述源文件為若干個(gè)文件夾時(shí),多叉樹的根節(jié)點(diǎn)的文件夾名稱設(shè)置為空;所述多叉樹的分支節(jié)點(diǎn)為度大于0的樹節(jié)點(diǎn), 多叉樹的葉子節(jié)點(diǎn)為度等于0的樹節(jié)點(diǎn)。
10.根據(jù)權(quán)利要求9所述的文件分解方法,其特征在于,分解獲取目標(biāo)文件中的單個(gè)源文件時(shí),通過遍歷查找樹形結(jié)構(gòu)獲取的的單個(gè)源文件標(biāo)記信息是單個(gè)源文件的字節(jié)數(shù)和其在內(nèi)存映射文件中的偏移量;所述文件拆分標(biāo)記信息是把源文件的內(nèi)容平均分為C個(gè)部分后每部分的標(biāo)記信息, 其包括源文件所分塊數(shù)、每部分的索引值、每部分的字節(jié)數(shù)、每部分在被拆分源文件中的位置。
全文摘要
本發(fā)明涉及計(jì)算機(jī)的文件系統(tǒng)技術(shù),具體涉及一種文件合并方法及分解方法。文件合并方法包括如下步驟遍歷讀取源文件形成源文件標(biāo)記信息并存儲(chǔ)到樹形結(jié)構(gòu)中;創(chuàng)建目標(biāo)文件及相應(yīng)的內(nèi)存映射文件;把存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容所占的字節(jié)數(shù)和樹形結(jié)構(gòu)的內(nèi)容作為文件頭信息先后寫入到內(nèi)存映射文件開始位置;根據(jù)樹形結(jié)構(gòu)將源文件的內(nèi)容寫入到內(nèi)存映射文件中,寫入的位置從存儲(chǔ)樹形結(jié)構(gòu)內(nèi)容之后開始;寫操作結(jié)束后,關(guān)閉內(nèi)存映射文件,形成的目標(biāo)文件即是合并文件。本發(fā)明還提供一種對(duì)合并后的目標(biāo)文件進(jìn)行分解的文件分解方法。本發(fā)明提高了文件合并速度或分解速度,并能夠在合并后的目標(biāo)文件中對(duì)某個(gè)源文件進(jìn)行快速查找和分解,極大地方便了用戶對(duì)文件的操作。
文檔編號(hào)G06F17/30GK102508880SQ20111031653
公開日2012年6月20日 申請(qǐng)日期2011年10月18日 優(yōu)先權(quán)日2011年10月18日
發(fā)明者胡建華, 韓玉青 申請(qǐng)人:廣東威創(chuàng)視訊科技股份有限公司