柏昌順
摘要:描述了文件刪除的原理?!拔募鬯闄C”的原理及其應(yīng)用,并介紹了以VB程序?qū)崿F(xiàn)“文件粉碎機”的整個過程。
關(guān)鍵詞:文件粉碎機VBAPI函數(shù)Dir函數(shù)
“文件粉碎機”能夠?qū)⑽募氐椎匿N毀的一種程序。其原理就是將需要銷毀的文件所占用的空間使用無意義的符號重新填充一遍,然后再將文件刪除,從而達到完全刪除文件的目的。
1界面的設(shè)計
(1)啟動VB,新建一個標準EXEDialog Control 6.0部件:從“工程”菜單中選擇“部件”命令,打開“部件”對話框。然后在Microsoft Common DialogControl 6.0部件前的復選框中打勾;(3)在forml窗體上依次創(chuàng)建一個ListBox.一個CommonDialog,一個Pro-gressBar及五個Command控件,屬性設(shè)置。設(shè)計完成后效果。
2“添加文件”功能的設(shè)計
“添加文件”命令的功能主要是利用CommonDialog控件顯示“打開”對話框,將待粉碎的文件加入到列表框中。該功能的難點在于文件的多選(利用etrl或shift鍵的配合,一次選擇多個文件),及其多選后將每個文件從返回的filename中分離出來。通常情況下CommonDialog控件是只能單選的,也就是一次只能選擇一個文件。如果要實現(xiàn)多選,則需將commondialog控件的flags屬性設(shè)置為:cdlOFNAllow-Multiselect+cdlOFNExolorer。
另外,我們還必需掌握“打開”對話框的返回值filename的格式。返回的filename是一個字符串,當僅選擇一個文件時返回值是文件的完整路徑和文件名;如果選擇的是多個文件,則返回字符串的格式為:路徑文件1文件2……文件n,路徑及文件名之間以空格隔開。實現(xiàn)方法如下:
3“添加目錄”功能的設(shè)計
“添加目錄”功能主要是用來將所選擇目錄及其子目錄里的所有文件都加入到待粉碎列表框中?!疤砑幽夸洝惫δ芤彩潜鞠到y(tǒng)中的一個難點。在VB中雖然為我們提供了DirveListBox(驅(qū)動器列表),DirListBox(目錄列表)。FileListBox(文件列表),CommonDia-log(通用對話框)等控件,這些控件用來瀏覽文件及文件夾或選擇文件時比較好用,但要用他們來實現(xiàn)添加目錄的功能還是比較困難的。本文使用了SHBrowseForFolder和SHGetPathFro-mlDList兩個API函數(shù)來顯示目錄選擇對話框,另外編寫了一個findfih過程實現(xiàn)對文件夾的遍歷。該過程利用VB提供的一個檢測文件是否存在的函數(shù)Dir和動態(tài)數(shù)組對文件夾以廣度優(yōu)先的順序進行遍歷。
3.1 API函數(shù)使用說明
使用API函數(shù)需要聲明DLL過程,在代碼窗口的“聲明”部分增加一個Declare語句。如該過程返回一個值,應(yīng)將其聲明為Function,格式如下:
如果過程沒有返回值,可將其聲明為Sub,格式如下:
3.2Dir函數(shù)使用說明
Dir函數(shù)返回一個String,用以表示一個文件名、目錄名或文件夾名稱,它必須與指定的模式或文件屬性、或磁盤卷標相匹配。語法:Dir[(pathname[,attributes])],Dir函數(shù)的語法具有以下幾個部分:
在第一次調(diào)用Dir函數(shù)時,必須指定pathname,否則會產(chǎn)生錯誤。如果也指定了文件屬性,那么就必須包括pathname,Dir會返回匹配pathname的第一個文件名。若想得到其它匹配pathname的文件名,再一次調(diào)用Dir。且不要使用參數(shù)。如果已沒有合乎條件的文件,則Dir會返回一個零長度字符串("")。一旦返回值為零長度字符串,并要再次調(diào)用Dir時,就必須指定pathname,否則會產(chǎn)生錯誤。不必訪問到所有匹配當前pathname的文件名,就可以改變到一個新的pathname上,但不能以遞歸方式來調(diào)用Dir函數(shù)。以vbDirectory屬性來調(diào)用Dir不能連續(xù)返回子目錄。
3.3實現(xiàn)代碼如下
List1.RemoveItem List 1.ListIndex
End Sub
6結(jié)束語
通過“文件粉碎機”的學習,讀者能更深該地理解文件在計算機里的存在形式,對大家將來在重要電子文件的管理中有一定的指導意義。本人在開發(fā)過程中也對VB的文件處理有了更深的理解,特別是對API函數(shù),它能實現(xiàn)許多我們意想不到的效果。