无法从vb.net中的临时文件夹中删除所有文件

时间:2014-08-15 04:31:43

标签: vb.net visual-studio-2013

我使用以下代码删除特定文件夹中的所有文件:

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 \中的文件时",它打破了说文件正在使用的操作。我希望代码不应引发异常并立即停止删除文件。如果无法删除该文件,则代码应移至下一个文件并尝试将其删除。这样,它应该能够从该目录中删除最大可能的文件。

3 个答案:

答案 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.DirectoryNotFoundExceptionSystem.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