專利名稱:一種可配置的文件快速識別和已損壞文件智能修復(fù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)軟件領(lǐng)域,特別是涉及Windows操作系統(tǒng)下一種可配置的文件快速識別和已損壞文件智能修復(fù)的方法。
背景技術(shù):
日常進(jìn)行文件打開、瀏覽、修改和保存等操作時(shí),常會遇到要操作的文件沒有擴(kuò)展名,有擴(kuò)展名但文件內(nèi)容遭到破壞,沒有擴(kuò)展名同時(shí)內(nèi)容又遭到破壞等情況。Windows操作系統(tǒng)下雙擊未知類型文件會彈出“打開方式”對話框,讓用戶選擇安裝的軟件來打開未知文件。文件缺少擴(kuò)展名時(shí),若文件是自己創(chuàng)建的或處理過的文件時(shí),自己可能知道文件類型, 可以通過Windows操作系統(tǒng)提供的“打開方式”對話框選擇相應(yīng)的軟件打開并處理文件,如果是別人的就會因無法知道文件類型而無法對文件進(jìn)行打開并處理操作。若出現(xiàn)文件有擴(kuò)展名但文件內(nèi)容遭到破壞或沒有擴(kuò)展名同時(shí)內(nèi)容又遭到破壞的情況,在未經(jīng)過特殊修復(fù)之前,Windows操作系統(tǒng)無法對文件進(jìn)行打開和處理操作。此時(shí)我們的通常做法是丟棄并刪除該文件,這樣往往會導(dǎo)致數(shù)據(jù)完整性的破壞和數(shù)據(jù)信息的丟失,進(jìn)而給企業(yè)或個(gè)人造成重大損失。
Windows操作系統(tǒng)長期雄踞全球操作系統(tǒng)霸主地位,是當(dāng)今主流操作系統(tǒng)的代表,研究Windows操作系統(tǒng)文件操作機(jī)制具有很好的代表性和通用性。對沒有擴(kuò)展名、有擴(kuò)展名但文件內(nèi)容遭到破壞或沒有擴(kuò)展名同時(shí)內(nèi)容又遭到破壞的文件進(jìn)行打開和處理時(shí), Windows操作系統(tǒng)沒有對未知類型文件進(jìn)行自動(dòng)識別和對已損壞文件簡單修復(fù)的功能提供完美的解決方案。要打開和操作上述文件,需要專業(yè)人士首先對文件進(jìn)行專業(yè)處理,費(fèi)時(shí)費(fèi)力又費(fèi)錢,影響與用戶交互的友好性,增加了普通用戶操作未知類型文件和已損壞文件的難度,給用戶日常文件操作帶來了很大麻煩。發(fā)明內(nèi)容
本發(fā)明的目的是針對現(xiàn)有技術(shù)的不足,提供Windows操作系統(tǒng)下一種可配置的文件快速識別和已損壞文件智能修復(fù)的方法,能方便快捷地實(shí)現(xiàn)Windows操作系統(tǒng)下對未知類型文件的快速識別和對已損壞文件的智能修復(fù)。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案提供一種Windows操作系統(tǒng)下未知類型文件快速識別和已損壞文件進(jìn)行智能修復(fù)的方法,它包括以下內(nèi)容
當(dāng)用戶選取要打開的文件后,首先判斷用戶要打開的文件是否有文件擴(kuò)展名,如果用戶選擇的文件有文件擴(kuò)展名,則軟件遍歷程序模塊(注此程序模塊是由專利發(fā)明人利用C#語言基于微軟.NET平臺開發(fā)的程序,具體實(shí)現(xiàn)詳見后面介紹)遍歷當(dāng)前系統(tǒng)安裝的所有應(yīng)用軟件,并根據(jù)文件擴(kuò)展名和應(yīng)用軟件的對應(yīng)關(guān)系,找到并啟動(dòng)對應(yīng)的應(yīng)用軟件加載用戶選擇的文件內(nèi)容,若加載成功就顯示文件內(nèi)容。若加載不成功,說明該文件有文件擴(kuò)展名,但文件內(nèi)容遭到破壞,文件修復(fù)程序模塊(注此程序模塊是由專利發(fā)明人利用C# 語言基于微軟.NET平臺開發(fā)的程序,具體實(shí)現(xiàn)詳見后面介紹)啟動(dòng)并修復(fù)受損壞的文件,文件修復(fù)后繼續(xù)利用系統(tǒng)安裝的對應(yīng)軟件加載該文件,若成功,就顯示文件內(nèi)容,不成功繼續(xù)修復(fù),如此循環(huán),直到滿足要求為止。
當(dāng)用戶選取操作的文件無文件類型擴(kuò)展名時(shí),文件內(nèi)容的字節(jié)流將被讀取到內(nèi)存,然后文件格式識別程序模塊(注此程序模塊是由專利發(fā)明人利用C#語言基于微軟.NET平臺開發(fā)的程序,具體實(shí)現(xiàn)詳見后面介紹)訪問文件格式數(shù)據(jù)庫(注此文件格式數(shù)據(jù)庫是專利發(fā)明人為存儲文件頭標(biāo)識,文件格式,打開此種文件所需要的應(yīng)用程序和他們之間的對應(yīng)關(guān)系等數(shù)據(jù)所建立的Xml文件,具體實(shí)現(xiàn)詳見后面介紹),通過用戶操作的文件的文件頭標(biāo)識和數(shù)據(jù)庫中文件頭標(biāo)識的比對得到文件的類型和打開文件所需要的應(yīng)用軟件。然后軟件遍歷程序模塊遍歷當(dāng)前系統(tǒng)安裝的所有應(yīng)用軟件,判斷系統(tǒng)中是否安裝了所需要的軟件,如果沒安裝,則提示用戶安裝對應(yīng)的應(yīng)用軟件,并自動(dòng)完成給該位置文件添加類型擴(kuò)展名的操作,如果安裝了對應(yīng)的應(yīng)用軟件,則根據(jù)文件格式識別程序模塊識別出來的文件類型和打開該類型文件所需要的應(yīng)用軟件,找到并啟動(dòng)對應(yīng)軟件加載用戶選擇的文件內(nèi)容,若加載成功則顯示文件內(nèi)容并接受用戶操作,在用戶保存該文件時(shí)自動(dòng)給文件加上文件類型擴(kuò)展名,以便下次進(jìn)行文件操作時(shí)能快速識別文件類型。若加載不成功,文件修復(fù)程序模塊啟動(dòng)并修復(fù)受損壞的文件,文件修復(fù)后繼續(xù)識別文件類型,遍歷系統(tǒng)軟件,加載文件內(nèi)容,若成功,就顯示文件內(nèi)容并接受用戶操作,在用戶保存該文件時(shí)自動(dòng)給文件加上文件類型擴(kuò)展名,不成功繼續(xù)修復(fù),如此循環(huán),直到滿足要求為止。
綜上所述,本發(fā)明一種可配置的文件快速識別和已損壞文件智能修復(fù)的方法,該方法具體步驟如下
步驟一 Windows操作系統(tǒng)下用戶選擇要操作的文件;
步驟二 通過鉤子程序獲取用戶選取文件的路徑和文件全名,并判斷該文件是否有文件類型擴(kuò)展名。鉤子程序的實(shí)現(xiàn)要調(diào)用Win32的API函數(shù),具體過程如下
①調(diào)用int SetffindowsHookEx (int idHook, HookProcess lpfn, IntPtr hMod, int dwThreadld)安裝鉤子;
②調(diào)用UnHookWindowsEx (int idHook)卸載鉤子;
依據(jù)用戶選取文件的全路徑和文件名調(diào)用Path. HasExtensionO判斷文件是否有文件類型擴(kuò)展名;如果有文件類型擴(kuò)展名,則轉(zhuǎn)步驟三。
步驟三軟件遍歷程序模塊遍歷文件系統(tǒng)中安裝的所用應(yīng)用軟件,獲取軟件名及安裝路徑。其實(shí)現(xiàn)的具體過程為
①調(diào)用Registry. LocalMachine. OpenSubKey ()打開 Software\Microsof\ Windows\CurrentVersion\Uninstall 位置的注冊表;
②通過foreach 循環(huán)遍歷 Software\Microsof\Windows\Current Version\ Uninstall遍歷子項(xiàng)名稱的字符串?dāng)?shù)組;
③通過foreach循環(huán)遍歷子項(xiàng)節(jié)點(diǎn);
④再調(diào)用RegistryKey. GetValue (〃DisplayName〃,〃〃)· ToStringO 獲取系統(tǒng)所安裝的所用應(yīng)用軟件的名稱;
⑤再調(diào)用RegistryKey. GetValue (〃DisplayIcon〃,〃〃)· ToStringO 獲取系統(tǒng)所安裝的所用應(yīng)用軟件的安裝路徑和文件名。
⑥同理通過foreach循環(huán)遍歷Software\Microsof遍歷子項(xiàng)獲取是否已安裝office, Sql Server, Visual Studio等其他軟件及其安裝路徑。
步驟四根據(jù)文件擴(kuò)展名和應(yīng)用軟件的對應(yīng)關(guān)系,調(diào)用Process. Start(string fileName, string argument)找到并啟動(dòng)對應(yīng)的應(yīng)用軟件加載用戶選擇的文件內(nèi)容;其中 fiIeName 指步驟三中的 RegistryKey. GetValue ("DisplayIcon", ""). ToString O 的值, argument指步驟二中獲取的用戶選取文件的路徑+文件全名。
步驟五判斷文件是否加載成功,如果加載成功就用對應(yīng)的應(yīng)用軟件顯示并操作用戶所選擇的文件內(nèi)容。
步驟六如果用戶所選擇的文件加載不成功,則通過文件修復(fù)程序模塊來修復(fù)文件內(nèi)容,然后繼續(xù)嘗試加載,如此循環(huán),直到滿足要求為止。
步驟七當(dāng)步驟二調(diào)用Path. HasExtensionO判斷文件無文件類型擴(kuò)展名時(shí),此時(shí)需要通過文件流的方式讀取文件字節(jié)流。其實(shí)現(xiàn)的具體過程為;
①實(shí)例化一個(gè)文件流FileStreamunknownfs=new FileStream unknownfs(@ 文件全路徑 + 文件名,F(xiàn)ileMode. Open, FileAccess. Read);
②聲明并實(shí)例化一個(gè)緩沖區(qū)byte[] unknownf sbytes=new byte [unknownfs. Length];
③通過文件流實(shí)例化一個(gè)二進(jìn)制文件讀取器BinaryReader unknownfsbr=new BinaryReader (unknownfs)。至此用戶所選的文件的內(nèi)容就被加載到了二進(jìn)制文件讀取器, 就可以對文件內(nèi)容進(jìn)行操作了。
步驟八獲取用戶選擇的字節(jié)流后就可以用文件格式識別程序模塊快速識別出其文件格式,文件格式識別程序模塊是通過讀取未知文件的文件頭標(biāo)示,并依據(jù)文件格式數(shù)據(jù)庫中文件頭標(biāo)示和文件格式的對應(yīng)關(guān)系確定文件的格式,并通過該數(shù)據(jù)庫中文件格式和打開該文件所需要的應(yīng)用程序之間的對應(yīng)關(guān)系找到打開該文件所需要的應(yīng)用程序。文件格式數(shù)據(jù)庫的xml文件格式如下
權(quán)利要求
1.一種可配置的文件快速識別和已損壞文件智能修復(fù)的方法,其特征在于該方法具體步驟如下 步驟一 Windows操作系統(tǒng)下用戶選擇要操作的文件; 步驟二 通過鉤子程序獲取用戶選取文件的路徑和文件全名,并判斷該文件是否有文件類型擴(kuò)展名;鉤子程序的實(shí)現(xiàn)要調(diào)用Win32的API函數(shù),具體實(shí)現(xiàn)過程如下 ①調(diào)用int SetffindowsHookEx(int idHook, HookProcess lpfn,IntPtrhMod, intdwThreadld)安裝鉤子; ②調(diào)用UnHookWindowsEx (int idHook)卸載鉤子; 依據(jù)用戶選取文件的全路徑和文件名調(diào)用Path. HasExtensionO判斷文件是否有文件類型擴(kuò)展名;如果有文件類型擴(kuò)展名,則轉(zhuǎn)步驟三; 步驟三軟件遍歷程序模塊遍歷文件系統(tǒng)中安裝的所用應(yīng)用軟件,獲取軟件名及安裝路徑;其具體實(shí)現(xiàn)的過程為①調(diào)用Registry. LocalMachine. OpenSubKey ()打開 Software\Microsof\Windows\CurrentVersion\Uninstall 位置的注冊表; ②通過foreach 循環(huán)遍歷 Software\Microsof\ffindows\Current Version\Uninstall遍歷子項(xiàng)名稱的字符串?dāng)?shù)組; ③通過foreach循環(huán)遍歷子項(xiàng)節(jié)點(diǎn); ④再調(diào)用RegistryKey. GetValue (〃DisplayName〃,〃〃). ToStringO 獲取系統(tǒng)所安裝的所用應(yīng)用軟件的名稱; ⑤再調(diào)用RegistryKey. GetValue (〃DisplayIcon〃,〃〃). ToStringO 獲取系統(tǒng)所安裝的所用應(yīng)用軟件的安裝路徑和文件名; ⑥同理通過foreach循環(huán)遍歷Software\Microsof遍歷子項(xiàng)獲取是否已安裝office,Sql Server, Visual Studio其他軟件及其安裝路徑; 步驟四根據(jù)文件擴(kuò)展名和應(yīng)用軟件的對應(yīng)關(guān)系,調(diào)用Process. Start (stringfileName, string argument)找到并啟動(dòng)對應(yīng)的應(yīng)用軟件加載用戶選擇的文件內(nèi)容;其中fi IeName 指步驟三中的 RegistryKey. GetValue ("Di splay I con", ""). ToString ()的值,argument指步驟二中獲取的用戶選取文件的路徑+文件全名; 步驟五判斷文件是否加載成功,如果加載成功就用對應(yīng)的應(yīng)用軟件顯示并操作用戶所選擇的文件內(nèi)容; 步驟六如果用戶所選擇的文件加載不成功,則通過文件修復(fù)程序模塊來修復(fù)文件內(nèi)容,然后繼續(xù)嘗試加載,如此循環(huán),直到滿足要求為止; 步驟七當(dāng)步驟二調(diào)用Path. HasExtensionO判斷文件無文件類型擴(kuò)展名時(shí),此時(shí)需要通過文件流的方式讀取文件字節(jié)流,其具體實(shí)現(xiàn)的過程為; ①實(shí)例化一個(gè)文件流FileStreamunknownfs=new FileStream unknownfs (0 文件全路徑 + 文件名,F(xiàn)ileMode. Open, FileAccess. Read); ②聲明并實(shí)例化一個(gè)緩沖區(qū)byte[Junknownfsbytes=newbyte[unknownfs.Length]; ③通過文件流實(shí)例化一個(gè)二進(jìn)制文件讀取器BinaryReaderunknownfsbr=newBinaryReader (unknownf s),至此用戶所選的文件的內(nèi)容就被加載到了二進(jìn)制文件讀取器,對文件內(nèi)容就進(jìn)行操作了; 步驟八獲取用戶選擇的字節(jié)流后就用文件格式識別程序模塊快速識別出其文件格式,文件格式識別程序模塊是通過讀取未知文件的文件頭標(biāo)示,并依據(jù)文件格式數(shù)據(jù)庫中文件頭標(biāo)示和文件格式的對應(yīng)關(guān)系確定文件的格式,并通過該數(shù)據(jù)庫中文件格式和打開該文件所需要的應(yīng)用程序之間的對應(yīng)關(guān)系找到打開該文件所需要的應(yīng)用程序;文件格式數(shù)據(jù)庫的xml文件格式如下
全文摘要
本發(fā)明一種可配置的文件快速識別和已損壞文件智能修復(fù)的方法,該方法有十四個(gè)步驟;本方法可以依據(jù)自定義文件格式數(shù)據(jù)庫實(shí)現(xiàn)文件的快速識別,可以多次自動(dòng)、循環(huán)地嘗試對已損壞文件進(jìn)行智能修復(fù),直至獲得滿意的結(jié)果;本方法設(shè)計(jì)的文件格式數(shù)據(jù)庫可以不斷的更新和修改,從而實(shí)現(xiàn)可配置的功能。它具有程序?qū)崿F(xiàn)簡單,功能強(qiáng)大,資源占用少,識別和修復(fù)效率高等優(yōu)點(diǎn),這為文件快速識別和已損壞文件智能修復(fù)提供了一種自動(dòng)、簡便、高效、可靠的解決方案,極大地提高了用戶工作效率。
文檔編號G06F9/445GK102981830SQ20121043336
公開日2013年3月20日 申請日期2012年11月2日 優(yōu)先權(quán)日2012年11月2日
發(fā)明者閆光榮, 劉嶺, 袁軻, 陶金庫, 紀(jì)長剛 申請人:北京航空航天大學(xué), 中航沈飛民用飛機(jī)有限責(zé)任公司