2014-01-23 31 views
2

我不想讓程序刪除我的臨時文件夾中的文件。我已經得到儘可能刪除文件的代碼,但我似乎無法弄清楚如何跳過正在使用的文件或捕獲異常,以便我的程序不會崩潰,當它試圖刪除文件使用。如何在嘗試刪除正在使用的文件時捕獲異常?

這裏是我的代碼至今:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
     If CheckBox1.Checked = True Then 
      Dim s As String 
      For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
       System.IO.File.Delete(s) 
      Next s 
     End If 
end sub 
+5

['Path.GetTempPath'](http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath(v = vs.110).aspx)是你的朋友。它不能100%保證用戶的配置文件目錄與用戶名具有完全相同的形式,也不能保證'C:\ Users'是配置文件目錄的正確根路徑。 –

回答

3

使用try/catch塊捕獲錯誤(異常)

 
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
    If CheckBox1.Checked = True Then 
     Dim s As String 
     For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
      Try 
       System.IO.File.Delete(s) 
      Catch ex As Exception 
       Console.WriteLine("File could not be deleted : {0}", ex.Message) 
      End Try 
     Next s 
    End If 
end sub 

這將使你的程序忽略錯誤並繼續處理下一個項目。

+1

不喜歡'On Error Resume Next'? :^) – helrich

+0

這工作可愛,我試圖做同樣的事情,但我曾嘗試過「下一個」,這可能是爲什麼,感謝一堆 – Jkrules

+2

沒有愛,所有的東西應該從來沒有存在:) – mbarthelemy

1

當拋出異常時,一旦它被Catch處理,執行將跳轉到End Try。因此,其中你放置你的Try/Catch塊的開始和結尾很重要。例如:

Try 
    Dim s As String 
    For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
     System.IO.File.Delete(s) 
    Next s 
Catch ex As IOException 
End Try 

在上面的例子,如果Delete任何調用失敗,它會跳轉到End Try並跳過For環(從而跳過的文件的其餘部分)的迭代的其餘部分。然而,考慮一下:

Dim s As String 
For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
    Try 
     System.IO.File.Delete(s) 
    Catch ex As IOException 
    End Try 
Next s 

在第二個例子中,它會跳轉到End Try然後繼續到For環(從而繼續在列表中的下一個文件)的下一次迭代。

另外,如上面評論所述,您絕對應該使用Path.GetTempPath來獲取臨時文件夾的路徑。你不應該自己建造路徑,因爲它可能會改變。例如,Windows不要求你的用戶文件夾必須在C:\Users之下。你實際上可以改變這一點。

+0

吃這樣的例外的壞習慣。 – Neolisk

+1

@Neilisk是的,它是。我只是試圖保持這個例子簡單,但你是對的,我甚至不應該暗示這樣的事情是好的做法。我更新了我的答案。再次感謝! –