如何在尝试删除正在使用的文件时捕获异常?

时间:2014-01-23 15:11:41

标签: vb.net

我没有制作删除临时文件夹中文件的程序。我已经到了删除文件的代码,但我似乎无法弄清楚如何跳过正在使用的文件或捕获异常,以便我的程序在尝试删除文件时不会崩溃使用

这是我到目前为止的代码:

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

2 个答案:

答案 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下。你实际上可以改变它。