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

如何验证路径字符串?.NET Path类处理无效路径字符的异常抛出问题

路径验证相关问题解答

为什么调用Path.GetFullPath传入带非法字符的路径没有抛出异常?

这是.NET Core 2.1及后续版本(包含.NET 5+)的预设行为,和你使用的PowerShell 7.2环境无关。

旧版.NET Framework的Path类确实会按照文档描述,主动检测路径中的非法字符并抛出ArgumentException,但为了适配跨平台路径规则、支持NTFS扩展路径等特殊场景,新版.NET对路径处理逻辑做了调整:Path类的方法现在仅做基础的路径格式解析,不会主动校验路径中是否包含系统禁用字符,最终的路径有效性校验会交给底层操作系统处理——只有当你实际对该路径执行创建、读写、删除等操作时,操作系统才会判断路径是否合法并返回对应错误。

怎么主动验证路径字符串的合法性?

如果需要在操作文件之前提前校验路径,可以用以下方案:

  • 调用Path.GetInvalidPathChars()获取当前系统禁止出现在路径中的字符数组,自行检查目标路径是否包含这些字符
  • 调用Path.GetInvalidFileNameChars()获取禁止出现在文件名/目录名中的字符数组,逐段校验路径中的目录名、文件名部分
  • 更稳妥的方案是在实际操作文件/目录时捕获异常,哪怕路径字符完全合法,也可能出现权限不足、父目录不存在、路径被占用等问题,运行时捕获异常是覆盖所有异常场景的最可靠方式。

你给出的测试结果属于.NET新版的正常表现,不符合旧版文档描述的原因是对应文档还没有针对新版.NET的行为做同步更新。

PS C:\src\t> [Io.Path]::GetFullPath('C:\sr<|c\t')
C:\sr<|c\t
PS C:\src\t> dotnet --version
5.0.301
PS C:\src\t> $PSVersionTable.PSVersion.ToString()
7.2.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:04