【问题标题】:Ignore unaccessable Files at DirectoryInfo.GetFiles忽略 DirectoryInfo.GetFiles 中不可访问的文件
【发布时间】: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)。

标签: vb.net fileinfo


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多