长路径 \\?\ 解决方法在某些安装上不起作用

2024-03-07

我正在开发的应用程序需要处理具有很长文件/路径名的文件。这是一个 .Net 4.6 应用程序,因此我实现了 4.6.2 之前的解决方法,以允许使用 \\?\ 语法,如概述的here https://stackoverflow.com/questions/41337607/prepending-doesnt-work-for-handling-long-paths and here https://stackoverflow.com/questions/5188527/how-to-deal-with-files-with-a-name-longer-than-259-characters.

这是我用来启用该功能的代码(我无法修改 app.config,因此必须在代码中设置):

var type = Type.GetType("System.AppContext");
if (type != null)
{
    AppContext.SetSwitch("Switch.System.IO.UseLegacyPathHandling", false);
    AppContext.SetSwitch("Switch.System.IO.BlockLongPaths", false);

    var switchType = Type.GetType("System.AppContextSwitches");
    if (switchType != null)
    {
        // We also have to reach into System.AppContextSwitches and manually update the cached private versions of these properties (don't ask me why):

        var legacyField = switchType.GetField("_useLegacyPathHandling", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
        legacyField?.SetValue(null, (Int32)(-1)); // <- caching uses 0 to indicate no value, -1 for false, 1 for true.

        var blockingField = switchType.GetField("_blockLongPaths", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
        blockingField?.SetValue(null, (Int32)(-1)); // <- caching uses 0 to indicate no value, -1 for false, 1 for true.
    }
}

这在我们测试过的所有机器上都有效(耶!),除了一个(嘘!)。与其他计算机一样,有问题的计算机是 Windows 10 Pro 安装,并且在 [Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem] 命名空间中具有相同的注册表设置。

该特定机器上的错误消息是:

不支持给定的路径格式

我们在该计算机上看到的一个区别是,当在 Windows 文件资源管理器中查看非常长的文件时,“位置”字段使用 r 单击 > 属性菜单中的 \\?\ 语法。

我猜测有一些注册表项导致了文件资源管理器中的差异以及我的修复失败,但不是上面提到的文件系统命名空间。

有没有人遇到过类似的问题,或者知道其他可能相关的注册表区域?


你可以设置那些AppContext如果您不想在每个计算机中设置它们,则可以通过注册表在计算机范围内进行切换应用程序配置单独归档:

这些设置将影响所有.NET未在其应用程序中指定不同值的应用程序应用程序配置文件。也就是说,注册表设置仅更改默认值,仍然可以通过指定来用特定于应用程序的值覆盖<AppContextSwitchOverrides value="..." />

启用LongPath.reg :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AppContext]
"Switch.System.IO.BlockLongPaths"="false"
"Switch.System.IO.UseLegacyPathHandling"="false"

C:\>regedit.exe EnableLongPath.reg  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

长路径 \\?\ 解决方法在某些安装上不起作用 的相关文章

随机推荐

  • Excel VBA从url获取网站标题

    Excel VBA 中的 HTML 页面标题 https stackoverflow com questions 7625316 html page title in excel vba 14509576 14509576 我知道这已经相当
  • Netty 4.0多端口,每个端口有不同的协议

    我想 netty 是我所知道的最好的 java 网络框架 在阅读并尝试一些示例后我有疑问 1 使用netty 4 0创建具有不同协议的多端口网络服务器的最佳方法是什么 每个服务器创建 EventLoopGroup bossGroup new
  • 如何覆盖引导样式

    我创建了轮播 我需要覆盖样式指示器按钮 我有风格 carousel indicators position absolute bottom 10px left 50 z index 1 width 60 padding left 0 mar
  • D2009 TStringlist ansisstring

    夏天的商业平静已经开始 所以我开始迁移到 D2009 我粗略地确定了程序的每个子系统是否应该保留 ascii 或者可以是 unicode 然后开始移植 一切都很顺利 所有组件都在 D2009 版本中 有些组件 如 VSTView 虽然稍微不
  • 如何将多个参数传递给 apply 函数

    我有一个名为 count 的方法 它需要 2 个参数 我需要使用 apply 方法来调用此方法 但是 当我将两个参数传递给 apply 方法时 出现以下错误 类型错误 counting 恰好需要 2 个参数 给定 1 个 我看过以下主题py
  • NSImage 无法缩放

    我正在开发一个快速应用程序 其中我有一种方法可以将 2x 图像重新缩放为常规图像 问题是它没有 Why BOOL createNormalImage NSString inputRetinaImagePath NSImage inputRe
  • 安装 IPython 开发版本后,IPython 笔记本无法启动

    我今天尝试安装 IPython 的开发版本 但是当我运行 ipython Notebook pylab inline 时 我打开一个空笔记本 没有仪表板 只有一个空白页 命令行显示 WARNING tornado access 404 GE
  • 图表未使用 Shiny R 和 NVD3 渲染

    我一直在尝试使用 NVD3 库创建闪亮的时间序列图 我对 R Shiny 和 NVD3 比较陌生 问题是 当我运行 ShinyApp 时 浏览器上没有呈现任何图表 使用 Chromes 开发人员工具 我可以看到 myChart 的 div
  • VBA:如何将不同工作表上的两个范围合并为一个,以循环遍历

    尝试将两个宽度相等但长度不同的范围 每个范围位于不同的纸张上 读取到另一个范围中 我需要按特定顺序循环组合数据 Set wRIL Worksheets INS Set rRIL wRIL Range L2 Set rRIL rRIL Cur
  • 谷歌地图缩小限制[重复]

    这个问题在这里已经有答案了 How do I set zoom out limit on the map it currently lets me zoom out too far to the point that I see multi
  • 安装具有 CRAN 镜像依赖项的本地 R 包

    我已经构建了一个 R 包 即我有 mypackage tar gz 文件 该软件包依赖于其他几个软件包 所有这些软件包都可以从任何 CRAN 镜像下载和安装 现在我想在尚未安装依赖项的系统上安装此软件包 并且我希望在安装软件包时自动下载并安
  • 项目错误:QT 中的未知模块:webkitwidgets [重复]

    这个问题在这里已经有答案了 我正在尝试使用 MXE 在来自本教程 https stackoverflow com questions 14170590 building qt 5 on linux for windows 14170591
  • 使用 dplyr 和 rle 对条件组中的连续值进行计数

    我的问题与下面提出的问题非常相似 但是我想添加一个附加命令以仅返回序列具有超过 2 个连续值的情况 当给定的序列运行在给定的时代和给定的年份内有超过 2 个连续的数字时 如何计算连续 成功 的数量 即 consec 中的 1 个 类似的问题
  • SQL Server 和 MySQL 同步

    我正在与一个在 SQL Server 和 MySQL 之间同步的客户合作 其中包含完全相同的架构和数据 我们希望将这些数据集中到一个数据库中 除了性能和可维护性问题之外 最初的设计还有什么不好的地方呢 您可以使用 MySQL 实例在 SQL
  • Pandas read_csv,读取缺失值指定为 int 的布尔值

    我正在尝试将 csv 导入到 pandas 数据框中 我有用 1 和 0 表示的布尔变量 其中缺失值用 9 标识 当我尝试将 dtype 指定为布尔值时 我会收到许多不同的错误 具体取决于我尝试的内容 示例数据 test csv var1
  • 在 PowerBI 报告中排除周末?

    我在 Power BI 中有一个 VS Team Services 项目的燃尽图 这样我们就可以报告故事点 而不是剩余的工作量 在图表中 X 轴上有日期 有没有办法从图表中过滤掉周末日期 周末没有活动 I found 这个论坛帖子 http
  • 使用 Angular JS 删除 Facebook OAuth 哈希值

    Facebook 喜欢添加 到我们提供的 OAuth 回调 URL 的末尾 虽然我们没有使用基于哈希的导航 但它看起来很烦人 我想摆脱它 location hash 导致无限循环 watch 这也会发生在 window location h
  • 如何在 JSON 响应反应本机上生成动态 UI

    这里我试图生成动态 UI 通过 API 我得到了一些 JSON 格式的响应 我必须在 UI 上绘制它 就像我没有定义任何 TextInput 一样 它应该动态生成 下面是一些示例 JSON 响应 这可能会根据不同的请求而改变 请帮助 我被困
  • 使用 JavaScript 获取 IE9 中的数据列表选项

    这段代码适用于除 Internet Explorer 9 之外的所有主要浏览器 我不明白我做错了什么 这可能是我错过的一些简单的事情 复制此代码 或使用这个jsFiddle http jsfiddle net Jordan PU9BF 在I
  • 长路径 \\?\ 解决方法在某些安装上不起作用

    我正在开发的应用程序需要处理具有很长文件 路径名的文件 这是一个 Net 4 6 应用程序 因此我实现了 4 6 2 之前的解决方法 以允许使用 语法 如概述的here https stackoverflow com questions 4