我没有制作删除临时文件夹中文件的程序。我已经到了删除文件的代码,但我似乎无法弄清楚如何跳过正在使用的文件或捕获异常,以便我的程序在尝试删除文件时不会崩溃使用
这是我到目前为止的代码:
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
答案 0 :(得分: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 :(得分:1)
当抛出异常时,一旦由Catch
处理,执行将跳转到End Try
。因此, where 放置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
下。你实际上可以改变它。