windows文件名中绝对禁止的字符是、/、:、*、?、"、|、,且ascii 0–31及等控制字符亦非法;需用std::find_first_of检测全字符串而非仅首尾。

Windows下哪些字符绝对不能出现在文件名里
Windows对文件名有明确的非法字符清单,\ / : * ? " | 这9个ASCII字符在任何位置(包括开头、中间、结尾)都会导致CreateFile、fopen等API直接失败,错误码通常是ERROR_INVALID_NAME或EINVAL。注意::不仅禁用于文件名,还禁止出现在路径末尾(如C: est:),但允许出现在UNC路径中(如\servershare里的冒号是协议的一部分,不属文件名范畴)。
实操建议:
- 用
std::find_first_of扫描字符串是否含"\\/:*?"|"(注意C++字符串中反斜杠需双写) - 不要只检查首尾——比如
"file:name.txt"中间的:同样非法 - 避免用正则匹配,简单字符集查找更快更可靠
如何检测不可见控制字符(C0/C1控制符)
ASCII 0–31(
