忽略DirectoryInfo.GetFiles中无法访问的文件

时间:2015-12-13 16:06:54

标签: vb.net fileinfo

所以,我正在尝试创建一个文件搜索程序,它也应该搜索给定文件夹的所有子文件夹。问题是,如果我想在C:\上搜索,我会得到一个UnauthorizedAccessException。我知道我可以制作一个" Try" -Statement,但这不起作用,因为FileInfo保持无效。

这是我的代码:

Sub SubfolderSearch()

    Dim diar2 As IO.FileInfo()
    Dim di2 As New IO.DirectoryInfo(Path)

    diar2 = di2.GetFiles("*", IO.SearchOption.AllDirectories) 'The Error occurs in this line

    Dim dra As IO.FileInfo

        For Each dra In diar2

            Dim FileName As String = dra.Name
            Dim FilePath As String = dra.FullName
            Dim FileSize As Integer = dra.Length / 1000

            'Search Procedure'

        Next

        SubfolderThread.Abort()

1 个答案:

答案 0 :(得分:-1)

您需要使用Directory.EnumerateFiles()逐个文件读取文件,以便忽略访问被拒绝的异常。如果您使用GetFiles()函数,您将最终返回整个数组,如果无法访问,将无法捕获异常继续。

MSDN说:

  

EnumerateFiles和GetFiles方法的不同之处如下:使用EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合;当您使用GetFiles时,您必须等待返回整个名称数组,然后才能访问该数组。因此,当您使用许多文件和目录时,EnumerateFiles可以更有效。

所以像这样使用它:

For Each dra In di2.EnumerateFiles("*", IO.SearchOption.AllDirectories)
    Dim FileName As String = dra.Name
    Dim FilePath As String = dra.FullName
    Dim FileSize As Integer = dra.Length / 1000
    'Search Procedure'
    'Put a try-catch block here.
Next