專利名稱:一種合并文件的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)和通信領(lǐng)域的文件系統(tǒng)技術(shù),尤其涉及一種在文件系統(tǒng)中合并文件的方法。
背景技術(shù):
在計算機(jī)的實際應(yīng)用中,經(jīng)常需要按照一定順序?qū)Χ鄠€文件進(jìn)行合并。如,當(dāng)通過多媒體硬件向文件系統(tǒng)寫入數(shù)據(jù)時,一般包括視頻和音頻的數(shù)據(jù),而通常的視頻和音頻播放文件的標(biāo)準(zhǔn)(如AVI),需要將音頻和視頻數(shù)據(jù)合并成一個邏輯文件。
目前文件合并方法是首先讀取源數(shù)據(jù),然后再寫入目標(biāo)數(shù)據(jù),最后刪除源數(shù)據(jù)。如圖1、圖2所示,將圖1中的四個源文件A、B、C、D合并為圖2中的目標(biāo)文件A1的過程。源文件A、B、C、D占用簇10到簇29,合并時分別將這些文件復(fù)制到另一存儲區(qū)間,合并后目標(biāo)文件A1占用簇40到59。
在一般應(yīng)用環(huán)境下對大的文件進(jìn)行合并時往往受到剩余空間的限制。例如,需要備份硬盤上的文件時,一般需要把他們打成包(ZIP,TAR,RAR等格式),如果磁盤空間不夠,這些操作將不能執(zhí)行。磁盤空間的余量與操作合并的數(shù)據(jù)量很多時候是成比例的。例如磁盤總?cè)萘坑?0GB及已有數(shù)據(jù)6GB;此時需要對6GB的數(shù)據(jù)進(jìn)行備份等操作,合并成為一個文件,由于剩余空間只有4GB,該操作將無法被執(zhí)行。
從上可知,現(xiàn)有的文件合并方法存在以下缺點1、由于需要進(jìn)行讀取數(shù)據(jù)、寫入數(shù)據(jù)和刪除數(shù)據(jù)操作,因此,不僅合并效率低和占用的系統(tǒng)資源多,而且還會導(dǎo)致過多的數(shù)據(jù)碎片。
2、如果剩余空間不足(小于源文件的數(shù)據(jù)大小),無法進(jìn)行文件合并操作,因此,受到存儲空間的限制。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種合并文件的方法,以解決采用現(xiàn)有技術(shù)合并文件時存在占用大量系統(tǒng)資源和受到存儲空間限制的問題。
為解決上述問題,本發(fā)明提供如下技術(shù)方案一種合并文件的方法,用于將存儲器上的多個文件按順序合并成一個文件,該方法包括如下步驟A、確定需要合并的源文件和各源文件的合并順序;B、創(chuàng)建一個新文件作為合并后的目標(biāo)文件,并將所述合并順序中的第一個源文件在存儲器中的起始位置作為該目標(biāo)文件的起始位置,和將所有源文件的總長度作為該目標(biāo)文件的長度記錄在該目標(biāo)文件的文件描述表中;C、修改文件系統(tǒng)中描述文件存儲位置的鏈表,使所述合并順序中前一個源文件的最后存儲位置指向后一個源文件的起始存儲位置;D、在文件系統(tǒng)中刪除所有源文件的文件描述表。
所述步驟C包括如下步驟C1、將所述合并順序中的第一個源文件作為當(dāng)前源文件;C2、在描述文件存儲位置的鏈表中查找描述當(dāng)前源文件的最后存儲位置的表項,和根據(jù)合并順序獲取當(dāng)前源文件的后一源文件的起始存儲位置;C3、修改描述當(dāng)前源文件的最后存儲位置的表項,使該表項中的下一存儲位置指向所述后一源文件的起始存儲位置;C4、確定所述后一源文件在所述合并順序中是否為最后的源文件,如果是則結(jié)束修改,否則,將該后一源文件作為當(dāng)前源文件并轉(zhuǎn)步驟C2。
由于采用本發(fā)明合并文件主要對文件描述表和描述文件存儲位置的鏈表進(jìn)行修改,不需要復(fù)制數(shù)據(jù)(讀和寫數(shù)據(jù))和清除原數(shù)據(jù),因此,不僅占用系統(tǒng)資源少,而且合并效率高,幾乎不產(chǎn)生數(shù)據(jù)碎片;在合并文件過程中僅需極少的存儲空間,對剩余空間較少的存儲器也可進(jìn)行文件合并操作。
圖1為現(xiàn)有技術(shù)中四個文件的文件分配表示意圖;圖2為現(xiàn)有技術(shù)中合并文件的示意圖;圖3、圖4為本發(fā)明合并文件的流程圖;圖5為本發(fā)明對圖1中所示文件進(jìn)行合并后的示意圖。
具體實施例方式
本實施例主要以文件分配表(File Allocation Table,F(xiàn)AT)文件系統(tǒng)對本發(fā)明進(jìn)行說明。在本發(fā)明中需要合并的文件稱為源文件,合并后的文件稱為目標(biāo)文件。
計算機(jī)系統(tǒng)中的文件系統(tǒng)主要完成三項功能跟蹤記錄存儲器上中被耗用的空間和自由空間,維護(hù)目錄名和文件名,跟蹤記錄每一個文件的物理存儲位置。FAT文件系統(tǒng)采用文件描述表(FDT)來記錄文件的屬性信息,如存儲文件的起始位置、文件長度(大小)等;通過FAT表來記錄文件的物理存儲位置,F(xiàn)AT表是在FAT文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)索引和定位的一種鏈?zhǔn)奖恚碇杏涗洿鎯Ω魑募拇靥?。?Cluster)是將某一線形范圍的物理位置(地址)形成一個管理單位,如磁盤的最小單位是一個扇區(qū),一個簇可以根據(jù)需要包含兩個、四個甚至更多的扇區(qū)。
本發(fā)明在合并文件時,通過修改目標(biāo)文件的文件描述表(FDT)和修改FAT表來達(dá)到合并文件的目的。參閱圖3,以合并圖1中所示源文件A、B、C、D為例,其主要過程如下步驟1、確定需要合并的各個源文件的名稱(包含路徑信息)和合并的排列順序。如輸入源文件名A、B、C、D,合并時的排列順序第一為源文件A,第二為源文件B,第三為源文件C,第四為源文件D。
步驟2、在文件系統(tǒng)中創(chuàng)建一個新文件作為合并后的目標(biāo)文件E。如果目標(biāo)文件的名稱為源文件中的某個文件名,則應(yīng)當(dāng)使其路徑不同。
步驟3、所有源文件的總長度和排列順序中第一源文件的起始存儲位置。
通過查詢源文件A、B、C、D的文件描述表獲取各源文件的長度,然后計算出總長度,同時,從源文件A的文件描述表中得到起始存儲位置的簇號(如圖中的簇0)。
步驟4、修改目標(biāo)文件E的文件描述表中的起始位置和文件長度,將步驟3中的計算出的文件總長度作為目標(biāo)文件E的長度,將源文件的起始位置簇號10作目標(biāo)文件E的起始存儲位置。
步驟5、修改FAT表,使排列順序中前一個源文件的最后存儲位置指向后一個源文件的起始存儲位置。即將源文件A存儲的最后簇14的下一簇的指針指向源文件B的起始簇15;將源文件B存儲的最后簇19的下一簇的指針指向源文件C的起始簇20;將源文件C存儲的最后簇24的下一簇的指針指向源文件D的起始簇25;源文件D存儲的最后簇不修改(該最后簇的下一簇指針指向為結(jié)束標(biāo)志)。
步驟6、在文件系統(tǒng)中刪除源文件A、B、C、D的文件描述表。
參閱圖4所示,步驟5包括以下步驟步驟51、將排列順序中的第一個源文件作為當(dāng)前源文件。
步驟52、在FAT表中查找到存儲當(dāng)前源文件的最后簇,根據(jù)排列順序獲取當(dāng)前源文件的后一源文件的起始存儲的簇。
步驟53、將前源文件存儲的最后簇的下一簇指針指向后一源文件的起始存儲的簇。
步驟54、判斷所述后一源文件在排列順序中是否為最后的源文件,如果是則結(jié)束,否則,將該后一源文件作為當(dāng)前源文件并轉(zhuǎn)步驟52。
步驟55、結(jié)束修改FAT表。
通過4次執(zhí)行步驟52到54后,即得到上述步驟5中的結(jié)果。
參閱圖5所示,本發(fā)明對圖1所示的四個文件合并后的目標(biāo)文件在存儲器中的物理存儲位置并未改變,而只是文件描述表和FAT表產(chǎn)生了變化,即原有的四個源文件A、B、C、D的文件描述表被刪除,四個源文件的存儲位置按順序鏈接。
從上可知不需要復(fù)制數(shù)據(jù)(讀和寫數(shù)據(jù))和清除原數(shù)據(jù),因此,不僅占用系統(tǒng)資源少,而且合并效率高,幾乎不產(chǎn)生數(shù)據(jù)碎片;在合并文件過程中僅需極少的存儲空間,對剩余空間較少的存儲器也可進(jìn)行文件合并操作雖然本實施例以FAT文件系統(tǒng)進(jìn)行了說明,但并不僅限于此,本發(fā)明同樣適用于NTFS文件系統(tǒng)(用于Windows2000/Windows XP等操作系統(tǒng))。上述的存儲器包括但不限于軟盤、硬盤和閃存等。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種合并文件的方法,用于將存儲器上的多個文件按順序合并成一個文件;其特征在于包括如下步驟A、確定需要合并的源文件和各源文件的合并順序;B、創(chuàng)建一個新文件作為合并后的目標(biāo)文件,并將所述合并順序中的第一個源文件在存儲器中的起始位置作為該目標(biāo)文件的起始位置,和將所有源文件的總長度作為該目標(biāo)文件的長度記錄在該目標(biāo)文件的文件描述表中;C、修改文件系統(tǒng)中描述文件存儲位置的鏈表,使所述合并順序中前一個源文件的最后存儲位置指向后一個源文件的起始存儲位置;D、在文件系統(tǒng)中刪除所有源文件的文件描述表。
2.如權(quán)利要求1所述的方法,其特征在于,步驟C包括如下步驟C1、將所述合并順序中的第一個源文件作為當(dāng)前源文件;C2、在描述文件存儲位置的鏈表中查找描述當(dāng)前源文件的最后存儲位置的表項,和根據(jù)合并順序獲取當(dāng)前源文件的后一源文件的起始存儲位置;C3、修改描述當(dāng)前源文件的最后存儲位置的表項,使該表項中的下一存儲位置指向所述后一源文件的起始存儲位置;C4、確定所述源文件在所述合并順序中是否為最后的源文件,如果是則結(jié)束修改,否則,將該后一源文件作為當(dāng)前源文件并轉(zhuǎn)步驟C2。
3.如權(quán)利要求1所述的方法,其特征在于,所述文件系統(tǒng)包括但不限于FAT系統(tǒng)和NTFS文件系統(tǒng)。
4.如權(quán)利要求1到3任一項所述的方法,其特征在于,所述存儲器包括但不限于軟盤、硬盤和閃存。
全文摘要
本發(fā)明公開了一種合并文件的方法,以解決采用現(xiàn)有技術(shù)合并文件時存在占用大量系統(tǒng)資源和受到存儲空間限制的問題;該方法為確定需要合并的源文件和各源文件的合并順序;創(chuàng)建一個新文件作為合并后的目標(biāo)文件,并將所述合并順序中的第一個源文件在存儲器中的起始位置作為該目標(biāo)文件的起始位置,和將所有源文件的總長度作為該目標(biāo)文件的長度記錄在該目標(biāo)文件的文件描述表中;修改文件系統(tǒng)中描述文件存儲位置的鏈表,使所述合并順序中前一個源文件的最后存儲位置指向后一個源文件的起始存儲位置;在文件系統(tǒng)中刪除所有源文件的文件描述表。
文檔編號G06F17/30GK1622094SQ200410102550
公開日2005年6月1日 申請日期2004年12月24日 優(yōu)先權(quán)日2004年12月24日
發(fā)明者譚帥 申請人:北京中星微電子有限公司