Windows下绝对不能出现在文件路径各段中的字符是:、*、?、"、<、>、|、、/共9个,需按路径段逐段检查;Linux/macOS除/和空字符外虽理论上允许,但控制字符及特殊符号易引发解析错误,跨平台建议统一按Windows规则过滤。

Windows下哪些字符绝对不能出现在文件路径里
Windows对文件名有明确禁止的字符列表,:、*、?、"、、<code>>、|、、/ 这9个符号在任何路径段(包括文件名和文件夹名)中都非法,哪怕只是出现在字符串里就可能触发CreateFile失败或std::filesystem::path构造异常。
注意: 和 / 在路径分隔场景是合法的,但作为文件名的一部分(比如 fooar.txt 中的反斜杠)就是非法的——判断时必须按「路径段」切分后逐段检查,不能只看整个字符串。
- 用
std::filesystem::path的filename()和parent_path()拆出各段再遍历 - 不要用
str.find('\')这类粗暴扫描,会误判路径分隔符 -
std::filesystem::path构造时若含非法字符会抛std::filesystem::filesystem_error,可捕获但不推荐作为主检测手段(开销大且掩盖真正问题)
Linux/macOS下要警惕哪些“看似合法”的字符
POSIX系统理论上允许除 / 和空字符