原發問問題:
asp.net 刪不了目錄
Dim file() As FileInfo = My.Computer.FileSystem.GetDirectoryInfo("Server.MapPath("." & "/temp/"").GetFiles()
For i As Integer = 0 To file.Length - 1
My.Computer.FileSystem.DeleteFile(file(i).FullName)
Next
解答:
親愛的讀者您好,很感謝您對於章立民研究室的支持,有關於您提到的問題,回覆以下:
由您的程序代碼來推斷,您多是想要刪除 ASP.NET 應用程序目錄下之 temp 子目錄內含的全部文件(不包含 temp 子目錄自己)。此時,可使用 My.Computer.FileSystem.GetFiles 方法,來取得該目錄中文件的字符串集合。接着藉由 For … Each 循環並搭配使用 My.Computer.FileSystem.DeleteFile 方法,便可刪除該目錄中的每個文件。以下所示便是一例:
Dim strPath As String = Server.MapPath("./temp/")
Dim strFiles As _
System.Collections.ObjectModel.ReadOnlyCollection(Of String)
Try
'
刪除文件。
strFiles = My.Computer.FileSystem.GetFiles(strPath)
For Each foundFile As String In strFiles
My.Computer.FileSystem.DeleteFile(foundFile)
Next
Catch ex As Exception
' 撰寫您所要的錯誤處理程序。
End Try
但由您發問的問題主題來看,彷佛是但願刪除位於應用程序中的 temp 這個目錄。這時候只需叫用 My.Computer.FileSystem.DeleteDirectory 方法,即可一次刪除特定的目錄,以下所示便是一列:
Dim strPath As String = Server.MapPath("./temp/")
Try
' 刪除該目錄。
My.Computer.FileSystem.DeleteDirectory(strPath, _
FileIO.DeleteDirectoryOption.DeleteAllContents)
Catch ex As Exception
' 撰寫您所要的錯誤處理程序。
End Try
請特別注意,叫用 My.Computer.FileSystem.DeleteDirectory 方法時,至少須要傳入兩個參數。以本例而言,第一個參數是所欲刪除的目錄,第二個參數是指定若是要刪除的目錄包含文件或子目錄時,應該連同此目錄的內含的文件或子目錄一併刪除。
假如,您但願經過 For ... To ... Next 循環來刪除 ASP.NET 應用程序目錄下之 temp 子目錄內的全部文件。使用 System.IO.File.Delete 方法彷佛是比較好的做法。值得注意的是,ASP.NET 不容許咱們直接刪除一個非空的目錄,亦即該目錄中,不能再內含其它文件或子目錄。若是所欲刪除之目錄尚存在其它文件或子目錄時,將會觸發「System.IO.IOException: 目錄不是空的」錯誤訊息。所以在刪除某個目錄以前,必須先檢查該目錄是否存有其它文件或子目錄,若是存在其它文件或子目錄時,必需要先將他們刪除,最後再刪除咱們所先前指定的目錄。
爲了方便刪除目錄做業的進行,咱們撰寫了一個DeleteADirectory函式,用來刪除某個目錄,以便於其中再次呼叫該函式(亦即經過遞迴呼叫的技巧),來刪除該目錄中的其它子目錄:
Private Function DeleteADirectory( _
ByVal strPath As String) As Boolean
Dim strTemp() As String
Dim intCtrl As Integer
Try
'
刪除文件。
strTemp = _
System.IO.Directory.GetFiles(strPath)
For intCtrl = 0 To UBound(strTemp)
System.IO.File.Delete(strTemp(intCtrl))
Next
'
刪除子目錄。
strTemp = _
System.IO.Directory.GetDirectories(strPath)
For intCtrl = 0 To UBound(strTemp)
DeleteADirectory(strTemp(intCtrl))
Next
'
刪除該目錄。
System.IO.Directory.Delete(strPath)
Return True
Catch ex As Exception
Return False
End Try
End Function
如圖表1所示,是咱們在「方案總管」中所看到的項目目錄架構。接着,咱們使用上述三種方式分別刪除 ASP.NET 應用程序目錄下之 temp1 目錄內的全部文件、刪除 temp2 目錄與其內含的文件或子目錄、刪除 temp3 目錄與其內含的文件或子目錄(其執行畫面與結果如圖表2所示)。
最後,提醒你們,欲讓 ASP.NET 成功刪除某個目錄(與其內含的文件、子目錄),請確認已經使用文件總管給予該目錄 ASPNET 這個本機之機器帳號(Machine Account)適當的權限。如圖表3、圖表4、圖表5所示,考慮系統安全,避免權限擴張,咱們在正式上線運做的環境,不會給予 ASPNET 本機機器帳號「徹底控制」的權限,但請至少賦予 ASPNET 對該特定目錄「修改」的權限,以便順利刪除特定目錄(與其內含的文件、子目錄)。
圖表1
圖表2
圖表3
圖表4
圖表5