《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(shè)計(jì)應(yīng)用 > 磁盤(pán)垃圾文件快速清理工具設(shè)計(jì)及實(shí)現(xiàn)
磁盤(pán)垃圾文件快速清理工具設(shè)計(jì)及實(shí)現(xiàn)
周利榮
(浙江工業(yè)大學(xué) 浙西分校圖書(shū)館,浙江 衢州 324000)
摘要: 針對(duì)磁盤(pán)清理工具速度慢、清理不徹底的情況,采用搜索與清理功能分離、程序與數(shù)據(jù)庫(kù)分離的方法,加快磁盤(pán)清理的速度,并且用戶可在數(shù)據(jù)庫(kù)中增加垃圾文件的類(lèi)型,從而實(shí)現(xiàn)軟件升級(jí),徹底清除磁盤(pán)垃圾文件。
關(guān)鍵詞: VB 6.0 垃圾文件 清理
Abstract:
Key words :

摘  要: 針對(duì)磁盤(pán)清理工具速度慢、清理不徹底的情況,采用搜索與清理功能分離、程序與數(shù)據(jù)庫(kù)分離的方法,加快磁盤(pán)清理的速度,并且用戶可在數(shù)據(jù)庫(kù)中增加垃圾文件的類(lèi)型,從而實(shí)現(xiàn)軟件升級(jí),徹底清除磁盤(pán)垃圾文件。
關(guān)鍵詞: VB 6.0;垃圾文件;清理 

    磁盤(pán)清理是通過(guò)刪除無(wú)用文件,增加磁盤(pán)的可用空間。Windows系統(tǒng)附件中的磁盤(pán)清理工具可以清理磁盤(pán)中的垃圾文件,還有許多專(zhuān)門(mén)用于磁盤(pán)清理的軟件如Disk Cleaner、EasyClean、track eraser pro。但這些軟件都存在清理不徹底或清理速度慢的問(wèn)題,如執(zhí)行系統(tǒng)附件中的磁盤(pán)清理工具后執(zhí)行命令dir*.tmp/s,發(fā)現(xiàn)磁盤(pán)仍存在大量垃圾文件,采用Disk Cleaner、track eraser pro等軟件雖然清理較徹底但速度較慢。針對(duì)以上問(wèn)題,本文介紹了解決這些問(wèn)題的方法。
1 解決問(wèn)題的途經(jīng)
    無(wú)論是系統(tǒng)產(chǎn)生的垃圾文件還是應(yīng)用程序產(chǎn)生的垃圾文件,都存在于固定少數(shù)目錄中。如果磁盤(pán)清理都從每個(gè)分區(qū)的根目錄開(kāi)始遍歷所有文件夾搜索垃圾文件然后執(zhí)行清理,必然造成軟件將大量時(shí)間用在搜索垃圾文件上從而造成清理速度慢的問(wèn)題。因此,必須將軟件的搜索功能與清理功能分離。軟件若沒(méi)有某種清理垃圾文件的功能,用戶是不能更改軟件的,必須將垃圾文件的類(lèi)型信息保存在數(shù)據(jù)庫(kù)的垃圾文件類(lèi)型表中。搜索程序從數(shù)據(jù)庫(kù)的垃圾文件類(lèi)型表中讀取信息執(zhí)行搜索功能,將搜索到的垃圾文件目錄保存在數(shù)據(jù)庫(kù)的垃圾文件信息表中,清理程序從數(shù)據(jù)庫(kù)的垃圾文件信息表中讀取信息,快速搜索固定目錄下的垃圾文件并執(zhí)行清理功能,從而實(shí)現(xiàn)快速清除垃圾文件。
2 程序功能
    程序主要具有兩方面功能:預(yù)處理功能和磁盤(pán)清理功能。
    (1)預(yù)處理功能
    預(yù)處理模塊從數(shù)據(jù)庫(kù)的垃圾文件類(lèi)型表中讀取記錄,搜索硬盤(pán)每個(gè)分區(qū)存在垃圾文件的目錄,并將垃圾文件類(lèi)型及垃圾文件的目錄保存在數(shù)據(jù)庫(kù)的垃圾文件信息表中。用戶若想增加程序清理某種垃圾文件的功能,無(wú)需修改程序,只需在垃圾文件類(lèi)型表中增加一條記錄即可。
    (2)磁盤(pán)清理功能
    清理模塊從數(shù)據(jù)庫(kù)的垃圾文件信息表中讀取記錄,根據(jù)垃圾文件類(lèi)型及存在目錄快速搜索并刪除垃圾文件,無(wú)需遍歷所有文件夾搜索垃圾文件。用戶若沒(méi)有刪除或安裝軟件,也沒(méi)有在垃圾文件類(lèi)型表中增加記錄,則無(wú)需執(zhí)行預(yù)處理模塊,直接執(zhí)行清理模塊即可快速清除垃圾文件。程序各模塊的功能設(shè)計(jì)及相互關(guān)系如圖1所示。
3 個(gè)人電腦常見(jiàn)垃圾文件類(lèi)型[1]及處理方法
    個(gè)人電腦常見(jiàn)垃圾文件主要有以下三類(lèi):
    (1)不存在于固定目錄中的垃圾文件
    主要包括:①擴(kuò)展名為“.tmp”的臨時(shí)文件,在軟件安裝時(shí)產(chǎn)生;②擴(kuò)展名為“.old”、“.bak”臨時(shí)交換文件,在軟件運(yùn)行時(shí)產(chǎn)生;③擴(kuò)展名為“.log”的日志文件,日志文件記錄著Windows系統(tǒng)中所發(fā)生的一切,包括各種系統(tǒng)服務(wù)的啟動(dòng)、運(yùn)行、關(guān)閉等信息,如Windows自動(dòng)更新后在c:\windows目錄下有kbxxxxx.log文件,如果系統(tǒng)運(yùn)行正常可以刪除;④磁盤(pán)檢查生成的臨時(shí)文件,擴(kuò)展名為“.chk”;⑤用來(lái)加快縮略圖顯示的緩存數(shù)據(jù)庫(kù)文件Thumb.db[2],可以方便用戶對(duì)圖片進(jìn)行預(yù)覽,圖片越多,文件就越大。
    (2)存在于固定目錄中的垃圾文件
    主要包括:①x:\Documents and Settings\用戶名\Local Settings\Temp\下的所有文件為用戶臨時(shí)文件,可以刪除;②x:\Windows\Temp\下的所有臨時(shí)文件;③x:\WindowsS\ServicePackFiles下的文件或文件夾,為升級(jí)sp1或sp2后的備份文件;④x:\Windows\SoftwareDistribution\download下的所有文件夾,用來(lái)存放Windows系統(tǒng)更新時(shí)的下載補(bǔ)丁,系統(tǒng)更新成功后可以刪除;⑤如果對(duì)系統(tǒng)進(jìn)行過(guò)Windows升級(jí),x:\Windows\下$xxxxx$的文件夾為備份文件夾,系統(tǒng)更新成功后可以刪除。其中x:為系統(tǒng)安裝的分區(qū)。
    (3)存在于固定目錄中的使用痕跡
    主要包括:①x:\Documents and Settings\用戶名\Cookies\下的所有Cookies文件;②x:\Documents and Settings\用戶名\LocalSettings\TemporaryInternet Files\下的所有文件,為IE瀏覽所保存的臨時(shí)文件;③x:\Documents and Settings\用戶名\Recent\下的所有文件為最近瀏覽文件的快捷方式;④x:\Documents and Settings\用戶名\Local Settings\History\下的所有文件為IE歷史記錄。其中x:為系統(tǒng)安裝的分區(qū)。
    處理方法:對(duì)于(1)類(lèi)型的垃圾文件,預(yù)處理模塊搜索其存在目錄并存入垃圾文件信息表。對(duì)于(2)類(lèi)型的垃圾文件, 預(yù)處理模塊直接將其存在目錄寫(xiě)入垃圾文件信息表中,然后在清理模塊中清除。對(duì)于(3)類(lèi)型的使用痕跡,直接在清理模塊中調(diào)用API函數(shù)清除。
4 程序設(shè)計(jì)
4.1 數(shù)據(jù)庫(kù)設(shè)計(jì)

    數(shù)據(jù)庫(kù)中包含2個(gè)表:垃圾文件類(lèi)型表及垃圾文件信息表。垃圾文件類(lèi)型表結(jié)構(gòu)中只包含1個(gè)字段:垃圾文件類(lèi)型。字段類(lèi)型為文本型,字段大小為10。垃圾文件信息表結(jié)構(gòu)中包含3個(gè)字段:(1)目錄。字段類(lèi)型為文本型,字段大小為100;(2)垃圾文件類(lèi)型。字段類(lèi)型為文本型,字段大小為10;(3)刪除類(lèi)型,字段類(lèi)型為數(shù)字型,字段大小為整型,取值為16表示刪除文件夾,取值為0表示刪除文件。
4.2 預(yù)處理模塊設(shè)計(jì)
4.2.1 垃圾文件存在目錄的搜索及保存

    對(duì)于不存在于固定目錄中的垃圾文件,由于其存在的分區(qū)及目錄不確定,預(yù)處理模塊需搜索每個(gè)分區(qū)及所有文件夾。硬盤(pán)中有幾個(gè)分區(qū)對(duì)于個(gè)人電腦是不確定的,這需要用API函數(shù)GetDriveType(drive)判斷磁盤(pán)驅(qū)動(dòng)器的類(lèi)型:參數(shù)drive為驅(qū)動(dòng)器盤(pán)符,函數(shù)返回值為5表示光盤(pán)驅(qū)動(dòng)器,返回值為3表示硬盤(pán)驅(qū)動(dòng)器,返回值為6表示RAM驅(qū)動(dòng)器,返回值為4表示網(wǎng)絡(luò)驅(qū)動(dòng)器,返回值為2表示軟盤(pán)驅(qū)動(dòng)器。為遍歷所有分區(qū),需用循環(huán)語(yǔ)句調(diào)用API函數(shù)GetDriveType(drive)[3]判斷是否為硬盤(pán)分區(qū)。其代碼如下:
    x=3
    i=67
    Do While x=3
    x=GetDriveType(Chr(i)+“:”)
    If x=3 Then
    R=Chr(i)+“:”
    fn=TreeSearch(R,cond,ff())
    End If
    i=i+1
    Loop
    其中,TreeSearch(R,cond,ff())是自定義函數(shù)(cond參數(shù)指定的垃圾文件類(lèi)型)。函數(shù)功能是從分區(qū)根目錄R開(kāi)始搜索存在垃圾文件的目錄,并將目錄保存在數(shù)組ff()中。程序調(diào)用函數(shù)GetDriveType(drive)判斷由Chr(i)+“:”盤(pán)符指定有分區(qū)是否為硬盤(pán)驅(qū)動(dòng)器,若是硬盤(pán)驅(qū)動(dòng)器則調(diào)用TreeSearch()存在垃圾文件的目錄。程序?qū)⑺阉鞯降慕Y(jié)果以記錄的形式保存在數(shù)據(jù)庫(kù)垃圾文件信息表中。
    對(duì)于存在于固定目錄中的垃圾文件,由于操作系統(tǒng)安裝的分區(qū)及目錄可以更改,用戶名可由用戶設(shè)置,上述x:\Windows是變量,在VB中,可用函數(shù)Environ(“windir”)獲取其值。變量x:\Windows\SoftwareDistribution\download的值可用Environ(“windir”) & “\SoftwareDistribution\download”得到。x:\Documents and Settings\用戶名\Local Settings\Temp\的實(shí)際值可用函數(shù)Environ(“temp”)獲取。預(yù)處理模塊直接以記錄的形式將存在于固定目錄中的垃圾文件信息保存在數(shù)據(jù)庫(kù)垃圾文件信息表中。
4.2.2 預(yù)處理模塊所需控件
    (1)ADO DATA控件ADODC1,用于連接數(shù)據(jù)庫(kù)打開(kāi)指定的表,visible屬性為false。
    (2)命令按鈕command1,用于添加垃圾文件類(lèi)型并保存在數(shù)據(jù)庫(kù)中。caption屬性為“添加”,單此按鈕彈出對(duì)話框要求輸入垃圾文件類(lèi)型,程序?qū)⑵浔4嬖诶募?lèi)型表中。為避免刪除“.sys”、“.exe”、“.dll”等正常文件,在保存前應(yīng)對(duì)其合法性進(jìn)行判斷。
4.3 清理模塊設(shè)計(jì)
4.3.1 清理模塊所需控件

    (1)ADO DATA控件ADODC1,用于連接數(shù)據(jù)庫(kù)打開(kāi)指定的表,visible屬性為false。
    (2)用于保存垃圾文件的列表框list1及保存垃圾文件夾的列表框list2。
    (3)標(biāo)簽label1用于顯示垃圾文件清理結(jié)果。
    (4)命令按鈕command1,caption屬性為“清除垃圾文件(夾)”,用于清除垃圾文件和垃圾文件夾。
    (5)命令按鈕command2,caption屬性為“清除使用痕跡”,用于清除第3節(jié)(3)所述的使用痕跡。
4.3.2 垃圾文件的搜索與清除
    對(duì)于不存在或存在于固定目錄中的垃圾文件,由于在預(yù)處理模塊已經(jīng)將其存在目錄、垃圾文件類(lèi)型、刪除類(lèi)型保存在數(shù)據(jù)庫(kù)垃圾文件信息表中,因此,程序只需從表中依次讀取記錄,調(diào)用自定義函數(shù)search(path,type,deletype)從path目錄搜索由type指定的垃圾文件(夾),根據(jù)deletype的取值,如果要?jiǎng)h除的是文件,則搜索并添加垃圾文件于列表框list1;如果要?jiǎng)h除的是文件夾,則搜索并添加垃圾文件夾于列表框list2。自定義函數(shù)search(path,type,deletype)3個(gè)參數(shù)的取值是記錄中3個(gè)字段的取值。用kill函數(shù)刪除List1中指定的垃圾文件,有的垃圾文件正在使用而無(wú)法刪除,可用On Error Resume Next跳過(guò)。用shell語(yǔ)句調(diào)用DOS內(nèi)部命令rd刪除List2指定的垃圾文件夾,參數(shù)/s表示除目錄本身外,還將刪除指定目錄下的所有子目錄和文件。/q表示以安靜模式刪除,刪除目錄樹(shù)時(shí)不要求確認(rèn)。其代碼如下:
    For I=0 To List1.ListCount-1
    On Error Resume Next
    Kill List1.List(I)
    Next I
    For I=0 To List2.ListCount-1
    On Error Resume Next
    Shell Environ(“system”)+“\cmd.exe/crd”+List2.List(I)
                 +“/s/q”,vbHide
    Next I
    IE的緩存和Cookies,可以通過(guò)API函數(shù)來(lái)進(jìn)行操作,如果要查找所有的緩存和Cookies,需要使用FindFirstUrlCacheEntry和FindNextUrlCacheEntry這2個(gè)函數(shù)判斷IE的緩沖文件存儲(chǔ)的位置并取得該文件;如果要?jiǎng)h除相對(duì)應(yīng)的緩存和Cookies,就使用DeleteUrlCacheEntry函數(shù)[4]。刪除最近訪問(wèn)過(guò)的文檔可以通過(guò)API函數(shù)SHAddToRecentDocs(SHARD_PATH, vbNullString)來(lái)實(shí)現(xiàn)。清除IE歷史記錄,可直接定位到注冊(cè)表中的位置,然后刪除 用API函數(shù)RegDeleteKey(HKEY_CURRENT_USER,“Software\Microsoft\Internet Explorer\TypedURLs”)[5]實(shí)現(xiàn)。
5 程序?qū)崿F(xiàn)
5.1 創(chuàng)建數(shù)據(jù)庫(kù)

    創(chuàng)建數(shù)據(jù)庫(kù)中2個(gè)表:垃圾文件類(lèi)型表及垃圾文件信息表的表結(jié)構(gòu)。“.tmp”、“.old”、“.bak”等作為記錄添加到垃圾文件類(lèi)型表中。
5.2 預(yù)處理模塊實(shí)現(xiàn)
    在新建工程中,將控件添加到窗口,并設(shè)置其屬性。要使用adodc1控件,需執(zhí)行菜單命令[工程]|[部件],選擇“Microsoft ADO Data Control 6.0”,單擊“確定”。對(duì)預(yù)處理模塊使用的API函數(shù)、結(jié)構(gòu)、常量加以聲明,編寫(xiě)form_load()、command1_click()過(guò)程代碼。程序測(cè)試完成后將工程生成“.exe”文件。
5.3 清理模塊實(shí)現(xiàn)
    在新建工程中,將控件添加到窗口,并設(shè)置其屬性。對(duì)清理模塊使用的API函數(shù)、結(jié)構(gòu)、常量加以聲明,編寫(xiě)command1_click()、command2_click()過(guò)程代碼,程序測(cè)試完成后將工程生成.exe文件。
    本程序?qū)崿F(xiàn)快速清理磁盤(pán)垃圾文件的關(guān)鍵在于:根據(jù)垃圾文件實(shí)際只存在于少數(shù)固定目錄的特點(diǎn),采用兩分離技術(shù)(程序與數(shù)據(jù)庫(kù)分離、搜索目錄模塊與執(zhí)行清理模塊分離),使其在計(jì)算機(jī)沒(méi)有安裝或刪除軟件的情況下只需執(zhí)行清理模塊,避免程序?qū)⒋罅繒r(shí)間花在搜索垃圾文件上,在清理磁盤(pán)垃圾文件時(shí)具有快速、徹底的特點(diǎn),避免垃圾文件存在造成的磁盤(pán)空間的浪費(fèi)。本程序在VB6.0+ACCESS 2003、Windows 2003及Windows XP操作系統(tǒng)下運(yùn)行通過(guò)。
參考文獻(xiàn)
[1] 張桂勇,陳芳瓊.API  FOR Windows 2000/XP詳解[M].北京:清華大學(xué)出版社,2003.
[2] 東方人華.Windows API編程范例入門(mén)與提高[M].北京:清華大學(xué)出版社,2004.
[3] 個(gè)人電腦常見(jiàn)垃圾文件類(lèi)[EB/OL].http://zhidao.baidu.com/question/910249.html.2005-11-11.
[4] 如何刪除臨時(shí)文件夾中的內(nèi)容?[EB/OL].http://topic.csdn.net/t/20060207/18/4544077.html.2006-02-07.
[5] 周利榮.Windows XP系統(tǒng)的幾個(gè)特殊文件和文件夾[J].電腦學(xué)習(xí),2008(6):42-43.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。