下面主要介紹專門用于處理文件和文件夾的VBA函數(shù)。 CurDir函數(shù) CurDir函數(shù)用于獲取當(dāng)前文件夾的路徑名稱,其語法為:
其中,參數(shù)drive可選,若省略該參數(shù),則表示當(dāng)前驅(qū)動器。CurDir函數(shù)返回值代表文件路徑,Variant型;若要返回字符串型的文件路徑,則使用CurDir$函數(shù)。 例如,如果工作簿保存在C盤,則下面的指令:
返回值為:C。 Name函數(shù) Name函數(shù)用于更改文件或者文件夾的名稱,其語法為:
Name old_pathname As new_pathname |
其中,參數(shù)old_pathname代表希望重命名的文件或文件夾的路徑和名稱,而參數(shù)new_pathname用于指定文件或文件夾的位置和新名稱。使用Name函數(shù),可以將文件從一個文件夾移至另一個文件夾,但是該函數(shù)不能移動文件夾。 在使用Name函數(shù)時,應(yīng)該注意以下幾點:
Dir函數(shù) Dir函數(shù)返回文件或者文件夾的名稱,常用來檢查磁盤中是否存在指定的文件或文件夾,如果不存在,那么返回空字符串(””)。Dir函數(shù)的語法如下:
Dir[(pathname[,attributes])] |
其中,參數(shù)pathname為可選參數(shù),是代表文件或文件夾的名稱的字符串,包括驅(qū)動器名稱。參數(shù)attributes可以使用下面列出的任一常量或者數(shù)值,指定文件的屬性:
常量 |
值 |
屬性含義 |
vbNormal |
0 |
普通文件 |
vbHidden |
2 |
隱藏文件 |
vbSystem |
4 |
系統(tǒng)文件 |
vbVolume |
8 |
卷標(biāo)。若指定了該屬性,則會忽略其他所有屬性 |
vbDirectory |
16 |
目錄或文件夾 |
attributes常量能夠組合在一起產(chǎn)生相應(yīng)的組合屬性進(jìn)行匹配,例如vbHidden+vbDirectory組合表示隱藏目錄。對象瀏覽器和VBA列表中還給出了其他幾個常量(如vbReadOnly、vbArchive),它們能作為attributes參數(shù)的值,但卻不能在Windows平臺上使用,也不能影響函數(shù)的操作。 盡管參數(shù)pathname為可選參數(shù),但在第一次調(diào)用Dir函數(shù)時必須包含參數(shù)pathname。而且如要指定了參數(shù)attributes,則同時必須指定參數(shù)pathname。此外,一旦Dir函數(shù)返回一個零長字符串,以后再次調(diào)用Dir函數(shù)之前必須指定參數(shù)pathname,否則將產(chǎn)生錯誤“無效的過程調(diào)用或參數(shù)”。 Dir函數(shù)返回字符串子類型的變體,而Dir$函數(shù)返回字符串?dāng)?shù)據(jù)類型。如果沒有發(fā)現(xiàn)與傳遞給函數(shù)的模式或文件屬性相匹配的文件,則返回零長字符串(””)。 例如,下面的指令:
返回指定文件夾中第一個文件的名稱。常量參數(shù)vbNormal指除隱藏、卷標(biāo)、目錄、文件夾或系統(tǒng)文件之外的任何文件。 Dir函數(shù)允許在指定的文件路徑名稱中使用通配符返回多個文件,其中星號(*)代表多個字符,問號(?)代表單個字符。例如,下面的過程列出指定目錄下文件的名稱。
Sub ListFiles()
Dim strFile As String
Dim strPath As String
strPath = InputBox("請輸入路徑名稱,例如C:\MyDirectory")
If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
strFile = Dir(strPath & "*.*")
If strFile <> "" Then Debug.Print "在文件夾" & strPath & "中的文件有:"
Debug.Print LCase$(strFile)
If strFile = "" Then
MsgBox "沒有找到文件."
Exit Sub
End If
Do While strFile <> ""
strFile = Dir
Debug.Print LCase$(strFile)
Loop
End Sub |
ListFiles過程首先詢問用戶輸入文件路徑名稱,如果輸入的路徑末尾沒有反斜杠,則在其后添加反斜杠。接著,在指定的文件路徑中搜索所有文件(*)。如果該文件夾中沒有文件,則顯示提示信息;如果存在文件,則將所有文件名顯示在立即窗口中。 下面的過程獲取C盤根目錄下的所有文件名稱并將其寫入工作表Sheet1中:
Sub GetFiles()
Dim strFile As String
Dim iRow As Integer
iRow = 1
With Worksheets("Sheet1").Range("A1")
strFile = Dir("C:\", vbNormal)
.Value = strFile
Do While strFile <> ""
strFile = Dir
.Offset(iRow, 0).Value = strFile
iRow = iRow + 1
Loop
End With
End Sub |
示例:在列表框中列出指定目錄中指定類型的所有文件
Private Sub CommandButton1_Click()
Dim sFilename As String
Dim sPath As String
sPath = "C:\Windows\*.txt"
sFilename = Dir$(sPath)
Do While sFilename <> ""
ListBox1.AddItem sFilename
sFilename = Dir$
Loop
End Sub |
Dir函數(shù)一次只能返回一個文件名。如果要獲得多個與參數(shù)pathname相匹配的文件,那么第一次調(diào)用Dir函數(shù)時必須使用必要的參數(shù),而在以后調(diào)用Dir函數(shù)時則不再使用參數(shù)。如果沒有一個文件名與初始的設(shè)置相匹配,那么函數(shù)將返回一個零長字符串。一旦Dir函數(shù)返回一個零長字符串,以后再次調(diào)用Dir函數(shù)時就必須指定參數(shù)pathname,否則將產(chǎn)生錯誤。上面的示例在用戶窗體中使用一個命令按鈕和一個列表框控件,說明如何在VBA應(yīng)用程序中使用Dir函數(shù)。 Dir函數(shù)是惟一不需要創(chuàng)建錯誤處理程序而能夠判斷文件是否存在的方法。使用Dir函數(shù)判斷文件是否存在很簡單,只需要將測試文件名傳遞給該函數(shù)即可。如果Dir函數(shù)返回一個零長字符串,則表明文件不存在,如下面的代碼: 示例:判斷文件是否存在
Public Function FileExists(sPath As String) As Boolean
If Dir(sPath) <> "" Then
FileExists = True
Else
FileExists = False
End If
End Function |
Dir函數(shù)返回的文件名在文件地址分配表中按順序顯示。如果需要以特定的順序顯示文件名,則必須在排序前先把文件名存儲在一個數(shù)組中,然后再按需要的順序排列。 Dir函數(shù)保存它在調(diào)用之前的狀態(tài),這意味著不能遞歸調(diào)用Dir函數(shù)。例如,如果Dir函數(shù)返回一個目錄的名稱,那么就不能調(diào)用Dir函數(shù)迭代該目錄下的文件并返回到原來的目錄。 如果將參數(shù)attributes只設(shè)置為vbDirectory,則該函數(shù)的作用將與原來有所不同。如果參數(shù)pathname使用了通配符,則該函數(shù)僅僅返回與搜索條件相匹配的第一個目錄。如果不提供新的參數(shù)pathname而連續(xù)調(diào)用Dir函數(shù),則按文件的順序返回文件名。 如果調(diào)用Dir函數(shù)返回的文件名不止一個,則必須提供一個顯式的文件規(guī)范。即如果希望獲得Windows目錄下所有文件的名稱,不能使用下面的語句:
strFile=Dir("C:\Windows",vbNormal) |
而應(yīng)該使用如下列語句指定的參數(shù)pathname來調(diào)用Dir函數(shù):
strFile=Dir("C:\Windows\*.*",vbNormal) |
Dir函數(shù)和Dir$函數(shù)僅僅返回文件名稱,而不提供文件大小、日期和數(shù)據(jù)、時間戳或者文件屬性等信息。此時,利用File System對象模型中的File對象的Attributes屬性很容易獲得這些信息。 使用Dir函數(shù)的一個關(guān)鍵在于要清楚各種屬性常量如何影響文件或者Dir函數(shù)如何返回文件。在默認(rèn)情況下,Dir函數(shù)返回一個普通文件(即屬性沒有設(shè)置為隱藏或者系統(tǒng)的文件)。vbHidden屬性返回隱藏文件或者常規(guī)文件,而不是返回系統(tǒng)文件或者隱藏的系統(tǒng)文件。vbSystem屬性返回系統(tǒng)文件或常規(guī)文件,而不是返回隱藏文件或隱藏的系統(tǒng)文件。vbSystem+vbHidden屬性則返回任何文件,無論是常規(guī)文件、隱藏文件還是系統(tǒng)文件。 FileAttr函數(shù) 確定一個用Open語句打開的文件的訪問模式。如果在16位的Windows系統(tǒng)中使用,則FileAttr函數(shù)可以獲得一個操作系統(tǒng)文件句柄。其語法為:
FileAttr (filenumber,[returntype]) |
其中,參數(shù)filenumber必需,為任何有效的文件號,Integer類型。參數(shù)returntype必需,指定返回信息的可選的數(shù)字,Integer類型,如果忽略該參數(shù)則缺省值為1。 如果將參數(shù)returntype指定為1,則把文件訪問模式作為長整型數(shù)返回,如下表格所示。
模式 |
值 |
輸入 |
1 |
輸出 |
2 |
隨機 |
4 |
追加 |
8 |
二進(jìn)制 |
32 |
將參數(shù)returntype設(shè)置為1可以獲得一個表示文件打開模式的返回值。將參數(shù)returntype設(shè)置為2可以獲得操作系統(tǒng)的文件句柄(僅適用于16位Windows系統(tǒng))。 交叉參考:File System對象模型中包含F(xiàn)ile對象,該對象有一個Attributes屬性及其它屬性,能夠獲得比FileAttr函數(shù)更多的信息。 FileDateTime函數(shù) FileDateTime函數(shù)用來檢查某文件最后修改的日期和時間,其語法為:
其中,參數(shù)Pathname為一個字符串,指定希望處理的文件,可以包括驅(qū)動器和文件夾名稱。該函數(shù)返回某文件修改時的日期和時間,日期和時間的格式取決于Windows控制面板的區(qū)域設(shè)置。 提示:如果需要單獨返回日期和時間,那么可以將FileDateTime函數(shù)作為DateValue函數(shù)或TimeValue函數(shù)的參數(shù)來使用。 調(diào)用FileDateTime函數(shù)之前,應(yīng)該用Dir函數(shù)確定文件是否存在。如果文件不存在,則應(yīng)用程序產(chǎn)生運行時錯誤“找不到文件”。 FileDateTime函數(shù)是一個只讀函數(shù),只能夠讀取數(shù)據(jù)而不能設(shè)置文件的日期和時間屬性。 如果創(chuàng)建文件后已經(jīng)修改了文件,F(xiàn)ileDateTime函數(shù)只返回最近一次修改的日期。要獲得文件的創(chuàng)建日期,必須使用Windows API。GetFileTime API調(diào)用不僅能返回文件最近一次修改的日期,而且能返回文件的創(chuàng)建日期和最近一次訪問的日期。 對隱藏文件也能使用FileDateTime函數(shù)。 交叉參考:File System對象允許使用File對象引用一個文件,可以用它獲得文件的創(chuàng)建日期、最近一次訪問和修改的日期。 FileLen函數(shù) FileLen函數(shù)用來獲取文件的大小,因此可使用該函數(shù)檢查某文件是否能夠保存在某磁盤上,即該磁盤的容量能否容納該文件。其語法為:
其中,參數(shù)Pathname為一個字符串,指定希望處理的文件,可以包括驅(qū)動器和文件夾的名稱。該函數(shù)以字節(jié)形式返回文件的大小,如果該文件已打開,則返回其最后一次保存時的大小。 因為FileLen函數(shù)是根據(jù)文件分配表返回文件長度的,所以FileLen函數(shù)的返回值反映了文件打開前的大小。對于已經(jīng)打開的文件,應(yīng)該使用LOF函數(shù)來確定該文件的當(dāng)前長度。 GetAttr函數(shù)和SetAttr函數(shù) GetAttr函數(shù)用來獲得文件或文件夾的屬性,其語法為:
其中,參數(shù)Pathname指定希望處理的文件或文件夾的路徑名稱。該函數(shù)返回一個整數(shù),代表下面的表格顯示的常量中的一個或多個常量之和。
常量 |
值 |
屬性含義 |
vbNormal |
0 |
普通文件(沒有設(shè)置其他屬性) |
vbReadOnly |
1 |
不可修改的文件或文件夾 |
vbHidden |
2 |
在普通設(shè)置下不可見的文件或文件夾 |
vbSystem |
4 |
系統(tǒng)文件 |
vbDirectory |
16 |
目錄 |
vbArchive |
32 |
檔案(在最后一次備份后,該文件已被修改) |
提示:文件和文件夾具有諸如“只讀”、“隱藏”、“系統(tǒng)”、“檔案”等特點,這些特點稱為屬性。 如果希望知道某文件是否具有特定的屬性,那么可以使用AND運算符將GetAttr函數(shù)的結(jié)果與常量值相比較。如果返回一個非零數(shù)值,則表明具有該特定的屬性。例如:
GetAttr("C:\MsDos.sys") AND vbReadOnly |
SetAttr函數(shù)用來設(shè)置文件或文件夾的屬性,其語法為:
SetAttr Pathname,Attributes |
其中,參數(shù)Pathname為一個字符串,代表希望處理的文件或文件夾;參數(shù)Attributes是一個或多個希望設(shè)置的屬性常量,參見上面的表格。 提示:不能給打開的文件設(shè)置屬性,如果希望使用SetAttr函數(shù)給打開的文件設(shè)置屬性,則必須先關(guān)閉該文件。 ChDir語句和ChDrive語句 使用ChDir語句來更改默認(rèn)的文件夾,其語法為:
其中,Path是指定新的默認(rèn)文件夾名稱的字符串,可以包含驅(qū)動器名。如果在Path中沒有包括驅(qū)動器名,那么默認(rèn)文件將會更改為當(dāng)前驅(qū)動器。注意,此時默認(rèn)文件夾改變并不會改變當(dāng)前的默認(rèn)驅(qū)動器。例如,如果當(dāng)前驅(qū)動器為C:\,使用下列語句:
將驅(qū)動器D:中的當(dāng)前文件夾改為“D:\MyFolder”,但當(dāng)前驅(qū)動器仍然是C:\。 如果沒有找到參數(shù)Path指定的路徑,則會導(dǎo)致錯誤“找不到路徑”;如果參數(shù)Path指向網(wǎng)絡(luò)上的另一臺計算機,則會導(dǎo)致錯誤“路徑/文件訪問錯誤”。 要更改當(dāng)前默認(rèn)的驅(qū)動器,則使用ChDrive語句,其語法為:
其中,Drive是指定新的默認(rèn)驅(qū)動器的字符串,用來設(shè)置默認(rèn)驅(qū)動器的名稱(A~Z)。如果指向一個并不存在的驅(qū)動器,則會出現(xiàn)信息框“設(shè)備不可用”;如果Drive指定為零長的字符串,則不會改變驅(qū)動器;如果Drive包含不止一個字符,則只有第一個字符代表用來設(shè)置的驅(qū)動器。 示例:下面的函數(shù)IsAvailableDrive用來確定指定的驅(qū)動器是否可用。
Private Function IsAvailableDrive(sDrive As String) As Boolean
On Error Resume Next
Dim sCurDrv As String
'獲取代表當(dāng)前驅(qū)動器的字母
sCurDrv = Left$(CurDir$, 1)
'試著改變驅(qū)動器
ChDrive sDrive
'根據(jù)是否有錯誤發(fā)生判斷驅(qū)動器是否可用
If Err.Number = 0 Then
'沒有發(fā)生錯誤-該驅(qū)動器可用
IsAvailableDrive = True
Else
'有錯誤發(fā)生-該驅(qū)動器不可用
IsAvailableDrive = False
End If
'恢復(fù)驅(qū)動器默認(rèn)設(shè)置
ChDrive sCurDrv
End Function |
使用下面的測試程序來測試該函數(shù):
Sub test()
Dim sDrv As String
sDrv = "T" '改為您要判斷的驅(qū)動器字母或者改為由用戶輸入
If IsAvailableDrive(sDrv) Then
ChDrive sDrv
Else
MsgBox "不能夠使用驅(qū)動器" & sDrv & ":\"
End If
End Sub |
該函數(shù)是一個通用函數(shù),在需要使用ChDrive的情形時,能夠減少代碼的數(shù)量。 MkDir語句和RmDir語句 使用MkDir語句可以創(chuàng)建一個新文件夾,其語法為:
其中,Path指定希望創(chuàng)建的新文件夾名稱,若省略驅(qū)動器名稱,則在當(dāng)前驅(qū)動器上創(chuàng)建新文件夾。 在調(diào)用MkDir語句之后,VB并不自動把新建文件夾視作當(dāng)前文件夾,如果要這樣,必須使用ChDir語句。 使用RmDir語句刪除不需要的文件夾,其語法為:
其中,Path指定希望刪除的文件夾的名稱,若省略驅(qū)動器名稱,則刪除當(dāng)前驅(qū)動器中存在的相同名稱的文件夾。若指定的文件夾不存在,則會出現(xiàn)錯誤信息“路徑未找到”。 提示:RmDir語句只能刪除空文件夾,也就是說,如果文件夾中包含有文件,那么使用RmDir語句刪除文件夾時會導(dǎo)致錯誤。此時,應(yīng)該先使用Kill語句刪除文件夾中的文件,再使用RmDir刪除該文件夾。 使用Kill語句和ReDim語句的刪除是不可逆的,因為這些語句不會把刪除掉的文件放到回收站中。 為了刪除文件夾,可以遞歸調(diào)用Dir函數(shù)引導(dǎo)到文件夾中的子文件夾。要注意的是,該函數(shù)可以每次在調(diào)用之前保存狀態(tài)信息。 下面的過程刪除一個文件夾中的所有文件并移動它的子文件夾,如果那些文件夾中還包含文件或文件夾,則可以通過遞歸調(diào)用該過程來刪除它們,直到把所有的子文件夾以及它們的文件都刪除為止。
Private Sub RemoveFolder(ByVal strFolder As String)
Static blnLowerLevel As Boolean '遞歸調(diào)用-不需要提示用戶
Dim blnRepeated As Boolean '在重復(fù)調(diào)用中使用Dir狀態(tài)信息
Dim strFile As String '在strFolder中包含文件/目錄
'刪除所有文件
Do
strFile = Dir(strFolder & "\*.*", vbNormal Or vbHidden Or vbSystem)
If strFile <> "" Then
If Not blnLowerLevel Then
If MsgBox("Delete files in directory " & _
strFolder & "?", _
vbQuestion Or vbOKCancel, _
"Confirm File Deletion") _
= vbCancel Then Exit Sub
End If
strFile = strFolder & "\" & strFile
Kill strFile
End If
Loop While strFile <> ""
'刪除所有目錄
Do
If Not blnRepeated Then
strFile = Dir(strFolder & "\*.*", vbDirectory)
blnRepeated = True
Else
strFile = Dir(, vbDirectory)
End If
If strFile <> "" And strFile <> "." And strFile <> ".." Then
If Not blnLowerLevel Then
blnLowerLevel = True
If MsgBox("Delete subdirectories of " & _
strFolder & "?", _
vbQuestion Or vbOKCancel, _
"Confirm Directory Deletion") _
= vbCancel Then Exit Sub
End If
RemoveFolder strFolder & "\" & strFile
blnRepeated = False
End If
Loop While strFile <> ""
RmDir strFolder
End Sub |
交叉參考:VB6中新的File System對象模型包含F(xiàn)olders集合對象和Folder對象,它們比內(nèi)置的文件夾管理函數(shù)更加靈活、方便。 FileCopy語句 FileCopy語句用于在文件夾之間復(fù)制文件,其語法為:
FileCopy source,destination |
兩個參數(shù)都是必需的參數(shù)。其中,第一個參數(shù)source指定要復(fù)制的文件名稱,可以包含驅(qū)動器名稱,String類型。第二個參數(shù)destination指定復(fù)制到的地點,同樣可以包含驅(qū)動器和文件夾的名稱,String類型。不能復(fù)制當(dāng)前已經(jīng)打開的文件。 如果沒有在參數(shù)source和參數(shù)destination中指定驅(qū)動器或文件夾,則認(rèn)為文件在當(dāng)前的驅(qū)動器或文件夾中。在使用FileCopy語句時,只輸入一個destination路徑是不夠的,必須提供一個文件名,即使它與source的內(nèi)容相同也可以,否則會產(chǎn)生運行時錯誤“路徑/文件訪問錯誤”。 FileCopy是一個語句而不是函數(shù),沒有返回值。因此可假定如果調(diào)用FileCopy語句時沒有錯誤生成,就認(rèn)為成功復(fù)制了文件。所以應(yīng)該為FileCopy語句編寫良好的錯誤處理程序。注意,如果destination指定的文件已經(jīng)存在,就會直接覆蓋該文件而不會預(yù)先提示用戶。 交叉參考:File System對象有幾種可以用于復(fù)制、移動文件和文件夾的方法。 下面的代碼將用戶指定的文件復(fù)制到名為“C:\MyDir”的文件夾中:
Sub CopyToMyDir()
Dim strFolder As String
Dim strSource As String
Dim strDestination As String
Dim strMsg1 As String
Dim strMsg2 As String
Dim iP As Integer
Dim iSS As Integer
Dim i As Long
On Error GoTo ErrorHandler
strFolder = "C:\MyDir"
strMsg1 = "該文件已存在于文件夾中."
strMsg2 = "復(fù)制到"
iP = 1
i = 1
'獲取文件名
strSource = Application.GetOpenFilename
'如果單擊取消則不做任何操作
If strSource = "False" Then Exit Sub
'獲取變量strSource中的反斜杠總數(shù)
Do Until iP = 0
iP = InStr(i, strSource, "\", 1)
If iP = 0 Then Exit Do
iSS = iP
i = iP + 1
Loop
'創(chuàng)建目標(biāo)文件名
strDestination = strFolder & Mid(strSource, iSS, Len(strSource))
'使用該名稱創(chuàng)建新文件夾
MkDir strFolder
'檢查指定的文件是否已存在于目標(biāo)文件夾中
If Dir(strDestination) <> "" Then
MsgBox strMsg1
Else
'復(fù)制所選文件到C:\MyDir文件夾中
FileCopy strSource, strDestination
MsgBox strSource & " " & strMsg2 & " " & strDestination
End If
Exit Sub
ErrorHandler:
If Err = "75" Then
Resume Next
End If
If Err = "70" Then
MsgBox "不可以復(fù)制已經(jīng)打開的文件."
End If
End Sub |
CopyToMyDir過程使用GetOpenFilename方法從用戶處獲取文件名稱,此時將出現(xiàn)內(nèi)置的“打開”對話框,從中選擇文件,如果用戶單擊“取消”按鈕,則返回值“False”,從而結(jié)束程序;如果用戶單擊“打開”按鈕,則選中的文件的完整路徑和名稱就被賦值給變量strSource。因為僅需要文件名稱,所以使用Do Until循環(huán)找到最后一個反斜杠在變量strSource中的位置。接著,為FileCopy語句的第二個參數(shù)準(zhǔn)備字符串,并將其值賦給變量strDestination,該變量存儲的字符串為目標(biāo)文件夾加反斜杠加用戶指定的文件名。如果目標(biāo)文件夾不存在,則使用MkDir函數(shù)創(chuàng)建新文件夾。然后,程序檢查所選擇的文件是否已經(jīng)存在于目標(biāo)文件夾中,如果文件已存在,則為用戶給出提示信息;如果文件不存在且該文件沒有被打開則將該文件復(fù)制到指定的文件夾并顯示相應(yīng)的信息。如果文件被打開,則會出現(xiàn)錯誤從而顯示相應(yīng)的提示。 Kill語句 Kill語句可以刪除文件夾中的文件,其語法為:
其中,Pathname指定希望刪除的一個或多個文件的名稱,可以包括驅(qū)動器和文件夾名稱,可以使用通配符(*或?)來快速刪除文件,但不能刪除已經(jīng)打開的文件或者被設(shè)置成只讀屬性的文件。 下面的程序代碼刪除上一節(jié)中C:\MyDir文件夾中的文件,最后刪除該文件夾自身:
Sub RemoveFolder()
Dim strFolder As String
Dim strFile As String
'將文件夾名稱賦值給變量,注意加上末尾處的反斜杠
strFolder = "C:\MyDir\"
strFile = Dir(strFolder, vbNormal)
Do While strFile <> ""
Kill strFolder & strFile
strFile = Dir
Loop
RmDir strFolder
End Sub |
在Windows 95和NT環(huán)境下,刪除的文件并不放在回收站里面,但是下面的代碼段說明如何利用Shell32.DLL中的FileOperation API函數(shù)將文件移到Windows 95或NT4的回收站中。
'聲明文件操作結(jié)構(gòu)
Type SHFILEOPSTRUCT
hWnd As Long
wFunction As Long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type
'聲明刪除操作需要的兩個常數(shù)
Private Const FO_DELETE = &H3
Private Const FO_FLAG_ALLOWUNDO = &H40
'聲明API調(diào)用函數(shù)
Declare Function SHFileOperation Lib "shell32.dll" _
Alias "SHFileOperationA" _
(lpFileOp As SHFILEOPSTRUCT) As Long
Public Function WinDelete(sFileName As String) As Long
'創(chuàng)建文件操作結(jié)構(gòu)的副本
Dim SHFileOp As SHFILEOPSTRUCT
'需要以Null結(jié)尾的字符串
sFileName = sFileName & vbNullChar
'將相關(guān)值賦給結(jié)構(gòu)
With SHFileOp
.wFunction = FO_DELETE
.pFrom = sFileName
.fFlags = FO_FLAG_ALLOWUNDO
End With
'將結(jié)構(gòu)傳遞給API函數(shù)
WinDelete = SHFileOperation(SHFileOp)
End Function |
對于文件夾的刪除,應(yīng)使用RmDir語句。
|