Windows路径中绝对禁用的字符是:、<、>、|、?、*共6个;Linux/macOS仅禁止空字节 ,/为唯一分隔符,其余字符均合法;跨平台检测需按系统分支分别检查。

Windows 下哪些字符绝对不能出现在路径里
Windows 文件系统对路径字符有硬性限制,:、<、>、|、?、* 这 6 个是保留字符,任何位置(包括文件名、目录名、完整路径字符串)出现即非法。注意:/ 和 是路径分隔符,本身合法,但混用或结尾多余会导致语义错误,不属于“禁用字符”范畴。
常见误判点:有人用 std::filesystem::path 构造后检查 .empty() 或捕获异常来判断,但这是错的——构造函数对含 ? 或 * 的路径不会抛异常,它只是把它们当普通字符存着;直到真正调用 create_directories() 或 exists() 才可能失败,且错误码不直接对应字符问题。
- 最稳妥方式是手动扫描字符串,检查是否包含上述 6 个字符
-
std::string::find_first_of("?:<>|*") != std::string::npos就能快速命中 - 注意:只检查路径字符串本身,不需提前 normalize 或 replace 分隔符
Linux/macOS 路径中真正危险的是什么
POSIX 系统没有全局“禁用字符表”,但有两个事实约束: