You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET获取OneDrive文件夹DirectoryInfo时GetFiles报错解决方法

故障原因

你遇到的报错由OneDrive本地缓存目录的系统特性导致:OneDrive会在本地同步文件夹内生成专属的重解析点(用来实现云文件占位、按需同步的特殊系统节点),原生DirectoryInfo.GetFiles方法开启AllDirectories递归遍历时,会尝试读取这类重解析点的内容,但无法识别OneDrive自定义的重解析标签,就会抛出*"The tag present in the reparse point buffer is invalid"*错误。
把文件移动到普通本地目录后不存在这类特殊重解析点,所以代码可以正常运行。

可直接复用的解决代码

你不需要理解复杂的系统原理,直接把下面的函数复制到你的代码中,替换原有GetFiles调用即可,普通本地文件夹、OneDrive文件夹都能正常遍历:

' 替换原有代码的调用示例:
' Dim Folder As New IO.DirectoryInfo(TextBox_RootFolder.Text)
' Dim Filelist As List(Of IO.FileInfo) = GetSafeFiles(Folder, "*.xlsx")

''' <summary>
''' 安全遍历文件,自动跳过OneDrive重解析点、无权限目录,避免重解析点报错
''' </summary>
''' <param name="rootDir">要遍历的根目录</param>
''' <param name="searchPattern">文件匹配通配符,比如*.xlsx</param>
Private Function GetSafeFiles(rootDir As IO.DirectoryInfo, searchPattern As String) As List(Of IO.FileInfo)
    Dim fileResult As New List(Of IO.FileInfo)()

    ' 读取当前目录下匹配的文件,碰到重解析点、无权限错误直接跳过,不中断遍历
    Try
        fileResult.AddRange(rootDir.GetFiles(searchPattern))
    Catch ex As IO.IOException When ex.Message.Contains("reparse point")
    Catch ex As UnauthorizedAccessException
    End Try

    ' 递归遍历子目录,提前跳过重解析点类型的文件夹(OneDrive占位、目录链接都属于这类)
    Try
        For Each subDir In rootDir.GetDirectories()
            If subDir.Attributes.HasFlag(IO.FileAttributes.ReparsePoint) Then
                Continue For
            End If
            fileResult.AddRange(GetSafeFiles(subDir, searchPattern))
        Next
    Catch ex As IO.IOException When ex.Message.Contains("reparse point")
    Catch ex As UnauthorizedAccessException
    End Try

    Return fileResult
End Function
使用注意事项
  • 代码完全基于原生System.IO实现,不需要额外引入第三方依赖
  • 遍历逻辑会自动跳过OneDrive的云占位重解析点、系统无权限目录,不会中断整体扫描
  • 普通本地文件夹下的遍历结果和你原来用GetFiles(SearchOption.AllDirectories)得到的结果完全一致
  • 如果你需要匹配其他扩展名,只需要修改调用时传入的通配符参数即可,比如要找docx就传"*.docx"

内容的提问来源于stack exchange,提问作者Max Headroom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:33:23