繁体   English   中英

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

[英]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.DirectoryNotFoundExceptionSystem.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM