windows路径中真正被系统拒绝的字符是、:、"、/、、|、?、*及ascii控制字符(0x00–0x1f)和del(0x7f),文件名末尾空格或点会被截断,con等保留名需不区分大小写校验。

Windows系统禁用字符有哪些
Windows路径中真正会被系统拒绝的字符只有 、<code>>、:、"、/、、|、?、* 这9个,加上 ASCII 控制字符(0x00–0x1F)和 DEL(0x7F)。文件名末尾的空格或点(.)虽不报错但会被系统自动截断——这不算“非法”,但会导致行为意外。
注意: 在路径中是合法分隔符,但出现在末尾(如 C: emp)或连续出现(如 C:\temp)通常不会触发创建失败,真正出错的是把它当普通字符用在文件名里(如 file
ame.txt)。
用 std::string::find_first_of 快速检测
最直接的办法是把所有禁用字符组成字符串,调用 find_first_of 查找是否存在。它比循环遍历快,且语义清晰。
-
std::string illegal = "&:"/\|?*";—— 注意\是转义后的单个反斜杠 - 对每个字符做
static_cast<unsigned char>(c) 判断是否为控制字符</unsigned> - 别忘了检查末尾空格和点:用
path.back() == ' '或path.back() == '.'(需确保非空) - 如果路径用于创建文件,还要额外排除
CON、PRN、AUX等保留设备名(不区分大小写,且后跟.或空格也算)
跨平台兼容性要注意什么
Linux/macOS 对路径字符限制极宽,几乎只禁止 <p>Linux/macOS 对路径字符限制极宽,几乎只禁止 <code>
