【发布时间】:2015-12-13 16:06:54
【问题描述】:
所以,我正在尝试制作一个文件搜索程序,它还应该搜索给定文件夹的所有子文件夹。问题是,例如,如果我想搜索C:\,我会得到UnauthorizedAccessException。我知道我可以做一个“Try”-Statement,但这也不起作用,因为 FileInfo 保持 Nothing。
这是我的代码:
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()
【问题讨论】:
-
您使用
Try..Catch错误地处理了这个问题。您可以通过尝试对FileName进行操作来解决此问题(例如If (Not FileName.ToString() == "") Then。 -
如果您有权访问这些文件,为什么会收到 UnauthorizedAccessException? Windows 是在骗你吗?抱歉,我们也无法解决此问题。
-
是的,这就是我说使用 Try..Catch 的原因。如果失败,它将中断并尝试下一个文件。
-
这个问题仍然没有任何意义,@cybermonkey 方法似乎是您正在寻找的。也就是说:GetFiles 只获取名称列表(= 不触发错误)然后您可以使用此列表做任何您想做的事情:跳过您知道错误的名称或依靠 try catch 来处理错误那些自动的(即,尽管有错误,仍将允许循环继续)。但是基本的想法是完全一样的:询问你可以做些什么来避免 UnauthorizedAccessException 似乎非常离题(= 只是避免任何引发它的事情)。
-
Ignore folders/files when Directory.GetFiles() is denied access 的副本(本质上问的是完全相同的问题,语言不同并不重要,因为它们都是 .NET)。