You need to enable JavaScript to run this app. 添加\\?\路径前缀调用CreateFile失败,目录存在时GetLastError返回123
优惠活动
大模型
产品
解决方案
定价
更多

添加\\?\路径前缀调用CreateFile失败,目录存在时GetLastError返回123

报错原因与解决方案

错误原因

错误码123对应ERROR_INVALID_NAME,即系统判定传入的路径语法非法,触发该错误的核心原因是路径格式不符合\\?\前缀的使用规范:

  • C语言字符串转义错误:你代码中写的路径常量"\\?\C:\\Temp\\..."无法生成正确的前缀。C语言中反斜杠是转义字符,每两个连续\\才能生成一个实际的反斜杠,因此正确的\\?\前缀在代码中需要写为\\\\?\\,你当前的写法生成的实际路径前缀为\?C:\,属于非法格式。
  • 额外可能的触发原因:\\?\前缀后的路径不允许使用相对路径、正斜杠分隔符,若存在这类写法也会触发语法错误。

解决方案

  • 修正路径常量的转义写法:将你的路径修改为如下转义格式:
// 转义后实际运行时路径为 \\?\C:\Temp\Today\NewDir\SubDir\my_new_file.dat
TCHAR szPathName[MAX_PATH*2] = _T("\\\\?\\C:\\Temp\\Today\\NewDir\\SubDir\\my_new_file.dat");
HANDLE hFile = CreateFile( szPathName, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_ALWAYS, 0, NULL );
  • 建议显式使用Unicode版本接口:\\?\前缀本身为Unicode路径设计,直接调用CreateFileW搭配宽字符路径可避免ANSI编码的解析异常:
wchar_t szPathName[MAX_PATH*2] = L"\\\\?\\C:\\Temp\\Today\\NewDir\\SubDir\\my_new_file.dat";
HANDLE hFile = CreateFileW(szPathName, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_ALWAYS, 0, NULL);
  • 校验路径格式:确保前缀后的路径为绝对路径,所有分隔符均为反斜杠\,不包含未解析的环境变量、通配符。如果路径是动态拼接生成的,建议调试输出实际传入CreateFile的路径内容,确认拼接过程没有引入多余特殊字符、反斜杠缺失等问题。

内容的提问来源于stack exchange,提问作者user9778277

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 17:24:00