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

请求解析System.IO.Directory.Exists()在Windows下的路径行为不一致问题

Windows路径验证与规范化机制测试

测试场景截图

我正在研究Windows的路径验证/规范化机制,通过.NET的System.IO.Directory、System.IO.File和System.IO.Path类开展基础测试,测试环境为Windows 10系统上的PowerShell 7.4.2(基于.NET 8.0.4)。

根据微软官方博客说明:

通常传递给Windows API的路径会被传入GetFullPathName()进行规范化,但存在一个重要例外——以问号而非句点开头的设备路径。这类路径必须使用标准反斜杠,若路径并非以\?\开头则会被规范化。

但需要注意的是,除规范化步骤外,Windows并不支持正斜杠。

尽管如此,在处理非规范化UNC路径时,正斜杠在部分位置被视为有效路径分隔符,部分位置则不被认可(见截图)。

测试显示:.NET的System.IO类对\?\开头的路径未进行规范化,调用System.IO.Path.GetFullPath()不会转换正斜杠或合并重复分隔符。

此外,System.IO.Directory.Exists()、System.IO.File.Exists()和System.IO.Path.Exists()对非UNC路径中含/的非规范化路径一致拒绝,但对UNC路径的判断取决于分隔符的位置:据我观察,在共享名与顶级目录的分隔符及之前,正斜杠被视为无效,但在后续路径中可能有效。我之所以说“可能”,是因为主机名为LOCALHOST的UNC路径并不遵循此规律:

LOCALHOST UNC路径测试截图

内容的提问来源于stack exchange,提问作者Mark Bereza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:11:13