我使用以下代码删除特定文件夹中的所有文件:
Sub DeleteFiles(Folder As String)
If Directory.Exists(Folder) Then
For Each _file As String In Directory.GetFiles(Folder)
File.Delete(_file)
Next
For Each _folder As String In Directory.GetDirectories(Folder)
DeleteFiles(_folder)
Next
End If
End Sub
每当我使用上面的代码删除" C:\ Temp"中的所有文件时通过使用DeleteFiles调用它(" C:\ Temp"),它会成功删除所有文件,但每当我尝试使用相同的代码删除" C:\ Windows \ TEMP \中的文件时",它打破了说文件正在使用的操作。我希望代码不应引发异常并立即停止删除文件。如果无法删除该文件,则代码应移至下一个文件并尝试将其删除。这样,它应该能够从该目录中删除最大可能的文件。
答案 0 :(得分:0)
您无法停止抛出异常。你需要做的是捕获异常,适当地处理它(这可能意味着忽略它)并继续前进。这意味着在第一个循环中放置一个Try...Catch
块。这样,当File.Delete
抛出异常时,您可以捕获它,忽略它,循环将继续。
请务必仅捕获您希望抛出的异常类型。否则,完全出乎意料的事情可能会导致问题而你只是忽略了它,这很糟糕。只能忽略您合理期望并且可以安全忽略的异常。
答案 1 :(得分:0)
您需要使用File.Delete()
语句处理Try....Catch...
引发的异常。我不是VB编码器(我很惊讶地发现自己回答了这个问题),但这样的事情应该有效:
Sub DeleteFiles(Folder As String)
If Directory.Exists(Folder) Then
For Each _file As String In Directory.GetFiles(Folder)
Try
File.Delete(_file)
Catch e As System.IO.IOException
Console.WriteLine(e.Message)
End Try
Next
For Each _folder As String In Directory.GetDirectories(Folder)
DeleteFiles(_folder)
Next
End If
End Sub
这将捕获System.IO.IOException
异常,记录它已收到,然后忽略它。请注意,这会捕获许多其他File.Delete()
相关的异常,例如System.IO.DirectoryNotFoundException
,System.IO.PathTooLongException
等。如果要捕获这些异常,则必须添加Catch
子句每个在更一般System.IO.IOException
之前。列出了可能的例外here,以及使用File.Delete()
的示例 - 您只需阅读文档。
您可能还想查看Directory.Delete以递归方式删除目录,文件及其子目录。
答案 2 :(得分:0)
Dim temp As String = Environment.GetEnvironmentVariable("TEMP")
Dim k As String() = System.IO.Directory.GetFiles(temp)
Dim i As Integer
For i = 0 To k.Length
On Error Resume Next
Kill(k(i))
System.IO.File.Delete(k(i))
Next