[英]Unable to delete all files from temporary folders in vb.net
我正在使用以下代码从特定文件夹中删除所有文件:
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
每当我使用上述代码通过使用DeleteFiles(“ C:\\ Temp”)调用“ C:\\ Temp”来删除所有文件时,它都会成功删除所有文件,但是每当我尝试使用相同的代码删除文件时在“ C:\\ Windows \\ TEMP \\”中,它会破坏该操作,表明该文件正在使用中。 我希望代码不引发异常并立即停止删除文件。 如果无法删除该文件,则代码应移至下一个文件并尝试将其删除。 这样,它应该能够从该目录中删除最大可能的文件。
您无法阻止引发异常。 您需要做的就是捕获异常,对其进行适当处理(这可能意味着只是忽略它),然后继续进行。 这意味着在第一个循环中放置一个Try...Catch
块。 这样,当File.Delete
引发异常时,您可以捕获该异常,将其忽略,然后循环将继续。
确保只捕获您希望引发的异常类型。 否则,完全出乎意料的事情可能会引起问题,而您只是忽略了它,这很糟糕。 仅忽略您合理预期和知道的异常可以安全地忽略。
您需要使用Try....Catch...
语句处理File.Delete()
引发的异常。 我不是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
。 此处列出了可能的异常,以及使用File.Delete()
的示例-您只需阅读文档即可。
您可能还希望查看Directory.Delete以递归方式删除目录,其文件及其子目录。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.