本發(fā)明涉及數(shù)據(jù)恢復(fù)領(lǐng)域,特別涉及一種基于cdfs文件系統(tǒng)的文件提取方法。
背景技術(shù):
近年來,多媒體計(jì)算機(jī)應(yīng)用以及信息產(chǎn)業(yè)的迅速發(fā)展,諸如只讀光盤(cd—rom)這樣的光盤存儲(chǔ)介質(zhì)已發(fā)展成為計(jì)算機(jī)信息數(shù)據(jù)的主要傳播載體。光盤產(chǎn)業(yè)也在迅速向信息數(shù)據(jù)市場(chǎng)擴(kuò)展。據(jù)有關(guān)專家預(yù)測(cè),只讀光盤(cd—rom)將從1992年僅占光盤市場(chǎng)的2%(約三千萬張)增長(zhǎng)至1996年的五億二千萬張。如此迅速的增長(zhǎng)主要來自以下幾方面因素。首先,只讀光盤是基于廣泛接受的國(guó)際標(biāo)準(zhǔn),可象激光唱盤那樣低成本、高效益的進(jìn)行大批量生產(chǎn)。第二個(gè)有利因素是光盤驅(qū)動(dòng)器的工作原理與激光唱機(jī)相似,因此而導(dǎo)致價(jià)格較低的光盤驅(qū)動(dòng)器。如何讀取光盤存儲(chǔ)介質(zhì)中存儲(chǔ)的文件,成為亟待解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提供一種基于cdfs文件系統(tǒng)的文件提取方法,解決目前市面上的數(shù)據(jù)恢復(fù)工具無法讀取基于cdfs文件系統(tǒng)中的文件內(nèi)容的問題。
為解決以上問題,本發(fā)明采用的技術(shù)方案如下:一種基于cdfs文件系統(tǒng)的文件提取方法,包括以下步驟:
s1加載光盤存儲(chǔ)介質(zhì),讀取cdfs文件系統(tǒng)分區(qū)的引導(dǎo)扇區(qū)內(nèi)容;
s2根據(jù)s1中讀取的內(nèi)容,解析其中分區(qū)的總扇區(qū)數(shù)、扇區(qū)的字節(jié)數(shù)、分 區(qū)的所有文件信息、目錄表項(xiàng)的起始地址、根目錄項(xiàng)信息;
s3遍歷根目錄項(xiàng)中的每一項(xiàng),讀取根目錄所有目錄信息;
s4根據(jù)s3中讀取的文件目錄項(xiàng)信息,解析其中文件的存儲(chǔ)地址、文件的創(chuàng)建時(shí)間、文件內(nèi)容的長(zhǎng)度、文件類型信息;
s5根據(jù)s4中解析的信息,判斷當(dāng)前獲取的目錄項(xiàng)信息中文件類型,若文件類型為文件夾則跳轉(zhuǎn)s3,繼續(xù)讀取文件夾中目錄信息,直至讀取完成,若文件類型為文件則跳轉(zhuǎn)s6;
s6根據(jù)目錄項(xiàng)解析的信息,跳轉(zhuǎn)至對(duì)應(yīng)地址獲取文件內(nèi)容。
作為優(yōu)選,s1具體如下:跳轉(zhuǎn)至16號(hào)扇區(qū),讀取cdfs文件系統(tǒng)分區(qū)的引導(dǎo)扇區(qū)內(nèi)容。
作為優(yōu)選,s2具體如下:根據(jù)s1中讀取的內(nèi)容并解析,在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x50-0x57處記錄的值表示分區(qū)的總扇區(qū)數(shù)、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x80-0x83處記錄的值表示扇區(qū)的字節(jié)數(shù)、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x8c-0x8f處記錄的值表示分區(qū)的所有文件信息、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x84-0x8b處記錄的值表示分區(qū)所有文件信息項(xiàng)的長(zhǎng)度、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x9c處記錄的值表示根目錄項(xiàng)信息。
作為優(yōu)選,s4具體如下:根據(jù)s3中讀取的文件目錄項(xiàng)信息并解析,其中在相對(duì)目錄項(xiàng)起始地址偏移0x02-0x09處記錄的值表示文件的存儲(chǔ)地址、在相對(duì)目錄項(xiàng)起始地址偏移0x12-0x17處記錄的值表示文件的創(chuàng)建時(shí)間、在相對(duì)目錄項(xiàng)起始地址偏移0x19處記錄的值表示文件類型信息、在相對(duì)目錄項(xiàng)起始地址偏移0x20處記錄的值表示目錄項(xiàng)對(duì)應(yīng)的文件夾或者文件的名稱的長(zhǎng)度,文件夾或者文件的名稱信息存儲(chǔ)在其后的對(duì)應(yīng)長(zhǎng)度的位置。
作為優(yōu)選,s5具體如下:根據(jù)s4中解析的信息,判斷當(dāng)前獲取的目錄項(xiàng) 信息中文件類型,將記錄文件類型的偏移地址處的值轉(zhuǎn)化為bit形式,若從右到左第二個(gè)bit位值為1時(shí),這表示該目錄項(xiàng)為文件夾則跳轉(zhuǎn)s3,繼續(xù)按照s3和s4中解析目錄項(xiàng)的邏輯結(jié)構(gòu)讀取文件夾中目錄信息,直至讀取完成,將記錄文件類型的偏移地址處的值轉(zhuǎn)化為bit形式,若從右到左第二個(gè)bit位值為非1時(shí),這表示該目錄項(xiàng)為文件則跳轉(zhuǎn)s6。
作為優(yōu)選,s6具體如下:根據(jù)目錄項(xiàng)解析的信息,當(dāng)目錄項(xiàng)文件類型標(biāo)記為文件時(shí),根據(jù)在相對(duì)目錄項(xiàng)起始地址偏移0x02-0x09處記錄的值表示文件的存儲(chǔ)地址跳轉(zhuǎn)值文件所存儲(chǔ)的扇區(qū)地址,再根據(jù)在相對(duì)目錄項(xiàng)起始地址偏移0x0a-0x11處記錄的值表示文件內(nèi)容長(zhǎng)度獲取文件內(nèi)容。
本發(fā)明的有益效果如下:采用本發(fā)明的方法可以根據(jù)cdfs文件系統(tǒng)結(jié)構(gòu)快速解析文件存儲(chǔ)邏輯;僅讀取記錄文件信息的地址而快速讀取文件。
附圖說明
圖1為本發(fā)明的流程示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。
本發(fā)明的方法的主要流程如下:
s1加載光盤存儲(chǔ)介質(zhì),讀取cdfs文件系統(tǒng)分區(qū)的引導(dǎo)扇區(qū)內(nèi)容;
s2根據(jù)s1中讀取的內(nèi)容,解析其中分區(qū)的總扇區(qū)數(shù)、扇區(qū)的字節(jié)數(shù)、分區(qū)的所有文件信息、目錄表項(xiàng)的起始地址、根目錄項(xiàng)信息;
s3遍歷根目錄項(xiàng)中的每一項(xiàng),讀取根目錄所有目錄信息;
s4根據(jù)s3中讀取的文件目錄項(xiàng)信息,解析其中文件的存儲(chǔ)地址、文件的創(chuàng)建時(shí)間、文件內(nèi)容的長(zhǎng)度、文件類型信息;
s5根據(jù)s4中解析的信息,判斷當(dāng)前獲取的目錄項(xiàng)信息中文件類型,若文件類型為文件夾則跳轉(zhuǎn)s3,繼續(xù)讀取文件夾中目錄信息,直至讀取完成,若文件類型為文件則跳轉(zhuǎn)s6;
s6根據(jù)目錄項(xiàng)解析的信息,跳轉(zhuǎn)至對(duì)應(yīng)地址獲取文件內(nèi)容。
進(jìn)一步而言,
s1加載光盤存儲(chǔ)介質(zhì),跳轉(zhuǎn)至16號(hào)扇區(qū),讀取cdfs文件系統(tǒng)分區(qū)的引導(dǎo)扇區(qū)內(nèi)容;
s2根據(jù)s1中讀取的內(nèi)容并解析,在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x50-0x57處記錄的值表示分區(qū)的總扇區(qū)數(shù)、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x80-0x83處記錄的值表示扇區(qū)的字節(jié)數(shù)、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x8c-0x8f處記錄的值表示分區(qū)的所有文件信息、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x84-0x8b處記錄的值表示分區(qū)所有文件信息項(xiàng)的長(zhǎng)度、在相對(duì)引導(dǎo)扇區(qū)起始地址偏移0x9c處記錄的值表示根目錄項(xiàng)信息;
s3遍歷根目錄項(xiàng)中的每一項(xiàng),讀取根目錄所有目錄信息,在相對(duì)根目錄項(xiàng)的起始地址偏移0x00-0x01處記錄的值表示目錄項(xiàng)內(nèi)容的長(zhǎng)度;
s4根據(jù)s3中讀取的文件目錄項(xiàng)信息并解析,其中在相對(duì)目錄項(xiàng)起始地址偏移0x02-0x09處記錄的值表示文件的存儲(chǔ)地址、在相對(duì)目錄項(xiàng)起始地址偏移0x12-0x17處記錄的值表示文件的創(chuàng)建時(shí)間、在相對(duì)目錄項(xiàng)起始地址偏移0x19處記錄的值表示文件類型信息、在相對(duì)目錄項(xiàng)起始地址偏移0x20處記錄的值表示目錄項(xiàng)對(duì)應(yīng)的文件夾或者文件的名稱的長(zhǎng)度,文件夾或者文件的名稱信息存儲(chǔ)在其后的對(duì)應(yīng)長(zhǎng)度的位置;
s5根據(jù)s4中解析的信息,判斷當(dāng)前獲取的目錄項(xiàng)信息中文件類型,將記錄文件類型的偏移地址處的值轉(zhuǎn)化為bit形式,若從右到左第二個(gè)bit位值為 1時(shí),這表示該目錄項(xiàng)為文件夾則跳轉(zhuǎn)s3,繼續(xù)按照s3和s4中解析目錄項(xiàng)的邏輯結(jié)構(gòu)讀取文件夾中目錄信息,直至讀取完成,將記錄文件類型的偏移地址處的值轉(zhuǎn)化為bit形式,若從右到左第二個(gè)bit位值為非1時(shí),這表示該目錄項(xiàng)為文件則跳轉(zhuǎn)s6;
s6根據(jù)目錄項(xiàng)解析的信息,當(dāng)目錄項(xiàng)文件類型標(biāo)記為文件時(shí),根據(jù)在相對(duì)目錄項(xiàng)起始地址偏移0x02-0x09處記錄的值表示文件的存儲(chǔ)地址跳轉(zhuǎn)值文件所存儲(chǔ)的扇區(qū)地址,再根據(jù)在相對(duì)目錄項(xiàng)起始地址偏移0x0a-0x11處記錄的值表示文件內(nèi)容長(zhǎng)度獲取文件內(nèi)容。