Windows下绝对不能出现在文件路径中的字符是:、、/、*、?、"、<、>、|这9个(含补充的<、>),任何位置出现均非法,需对整个路径字符串而非仅文件名扫描校验。

Windows下哪些字符绝对不能出现在文件路径里
Windows对路径字符限制最严格,:、*、?、"、、<code>>、| 这7个字符在任何位置(包括文件名、目录名、盘符后)都非法,哪怕只是出现在字符串里就可能让CreateFileA或std::filesystem::path构造失败。特别注意:——它不只用于盘符(如C:),出现在中间(如log:2024.txt)也会被拒绝。
实操建议:
立即学习“C++免费学习笔记(深入)”;
- 用
std::string::find_first_of快速扫描:path.find_first_of(R"(:"/|?*)") != std::string::npos - 不要只检查文件名部分——整个路径字符串都要查,因为
dir<name>中<code>在目录名里同样无效 - 注意
/和:虽然是Windows合法分隔符,但/在API层面常被接受(会自动转换),但某些旧工具或命令行参数里仍可能出问题,建议统一用或由std::filesystem::path处理
Linux/macOS路径里真正危险的是什么
POSIX系统理论上允许除