所以,我正在尝试创建一个文件搜索程序,它也应该搜索给定文件夹的所有子文件夹。问题是,如果我想在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()
答案 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