(一)編程原理;
將文件刪除到回收站的過程實際上就是,將被刪除的文件加上原來存放位置信息、刪除日期等信息后,移動到WINDOWS所在分區的Recycled目錄下的過程。雖然我們獨立的編寫徹頭徹尾的代碼可以實現,但是卻比較繁瑣。我們可以調用windows api函數SHFileOperation來方便的實現,它的功能很多,涉及到文件的拷貝、剪切、刪除等等,在本文中,我只討論它的兩個功能---將文件放入回收站和絕對刪除。
(二)編程示例;
(第一步)啟動vb6中文版建立一個標準exe工程,將窗體命名為"form1",從左邊的工具箱中添加一個drivelistbox控件“dir1”,一個dirlistbox控件“dir1”,一個filelistbox控件“file1”,一個checkbox控件“optRecycle”,一commandbutton控件“cmddelete”,將以上控件調整到適當位置,雙擊窗體,寫入以下代碼:
Option Explicit
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As StringEnd Type’文件操作函數類型參數
Private Const FO_DELETE = &H3‘本參數代表刪除Private Const FOF_ALLOWUNDO = &H40‘本參數表示將文件放入回收站
Private Declare Function SHFileOperation Lib _"shell32.dll" Alias "SHFileOperationA" _(lpFileOp As SHFILEOPSTRUCT) As Long ‘api函數聲明
Public Sub ShellDeleteOne(sFile As String, ActionFlag As Long) ‘自定義文件刪除操作函數ShellDeleteOne,第一個參數指定被刪除的文件名,第二個參數指定是否放入回收站
Dim SHFileOp As SHFILEOPSTRUCTDim r As Long
sFile = sFile & Chr$(0)
With SHFileOp
.wFunc = FO_DELETE
.pFrom = sFile
? .fFlags = ActionFlag ‘如果ActionFlag=0表示絕對刪除,而ActionFlag=FOF_ALLOWUNDO表示放入回收站End With
r = SHFileOperation(SHFileOp)‘執行刪除操作End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path‘將目錄列表框與文件列表框關聯End Sub
Private Sub Drive1_Change()
On Error Resume Next ‘忽略錯誤
Dir1.Path = Drive1.Drive‘將驅動器列表框與目錄列表框關聯End Sub
Private Sub Form_Load()
Me.Caption = "回收站調用演示_ --zouherohttp://zouga.yeah.net"‘初始化程序標題
cmdDelete.Enabled = False ‘禁止刪除按鈕直到有文件被選中End Sub
Private Sub cmdDelete_Click()Dim r As LongDim file2Delete As StringDim fPath As StringDim ActionFlag As LongfPath = Dir1.Pathfile2Delete = File1.List(File1.ListIndex)‘記錄文件名If Right(fPath, 1) $#@60;$#@62; "" Then
fPath = fPath & ""End If‘判斷文件路徑file2Delete = fPath & file2Delete ‘完整的文件名ActionFlag = 0& ‘默認為絕對刪除If optRecycle.Value Then ActionFlag = FOF_ALLOWUNDO‘如果optRecycle被選中則將文件放入回收站ShellDeleteOne file2Delete, ActionFlag ‘調用自定義刪除函數File1.Refresh‘刷新文件列表框cmdDelete.Enabled = File1.ListIndex $#@62; -1‘如果選定目錄下沒有文件或者沒有選中文件,刪除按鈕被禁止End Sub
Private Sub File1_Click()
cmdDelete.Enabled = File1.ListIndex $#@62; -1End Sub
(第二步)調試;
按下f5鍵,通過選擇驅動器列表框、目錄列表框、文件列表框選定文件,當“放入回收站”被選中時(即它前面有一個黑色的對號),按下刪除按鈕,將會出現確認對話框,文件被放入回收站,反之,將會被絕對刪除。
windows api函數SHFileOperation是一個功能非常強大的函數,用它可以方便的實現許多編程語言所無法直接實現的功能。至于其他的用途請參考windows api手冊。
對于國內的程序員來說,涉及windows高級編程的相關資料和示例代碼非常少,這在一定程度上限制了程序員的開發高級應用程序能力。本文中的示例不僅僅涉及了windows api文件操作函數的運用,而且演示了文件瀏覽以及關聯的技巧,希望諸位編程高手能夠有所借鑒和斧正,如果有問題或者希望相互交流,請與我聯系zouworld@sina.com。