Rust fs::create_dir_all在其他电脑运行异常问题求助
排查Windows 11下Rust创建网络共享目录失败问题
问题背景
代码在Windows 10上可正常创建网络共享目录(Z盘为第三台Win11电脑的共享文件夹),但在另一台Windows 11电脑上运行时,std::fs::create_dir_all返回failed to create whole tree,WinAPI的GetLastError()返回ERROR_PATH_NOT_FOUND。两台电脑权限一致,目标路径的上级目录Z:\NUOVO RAPPORTINO ELETTRONICO\2024已存在。
相关代码:
let new_file_path = "Z:\NUOVO RAPPORTINO ELETTRONICO\2024\1 Gennaio\Name Surname"; match std::fs::create_dir_all(new_file_path) { Ok(_r) => { println!("Creazione cartelle avvenuta con successo!"); //Other things to do if succeeds }, Err(error) => { println!("Errore durante la creazione delle cartelle: {error}"); println!("GetLastError: {}", unsafe { GetLastError().to_string() }); }, }
排查步骤
1. 修复路径字符串的转义错误
Rust字符串中的反斜杠\是转义字符,原代码中的路径会被错误解析:
\N、\2等会被当作八进制/特殊转义符,导致实际路径与预期不符。- 正确写法二选一:
- 使用原始字符串(推荐):
let new_file_path = r"Z:\NUOVO RAPPORTINO ELETTRONICO\2024\1 Gennaio\Name Surname"; - 转义所有反斜杠:
let new_file_path = "Z:\\NUOVO RAPPORTINO ELETTRONICO\\2024\\1 Gennaio\\Name Surname";
- 使用原始字符串(推荐):
这是最可能导致跨系统路径识别失败的核心原因。
2. 检查网络驱动器映射的上下文差异
- Windows 11中,网络驱动器是用户上下文绑定的:如果程序以管理员权限运行,无法访问普通用户映射的Z盘;反之亦然。
- 让Win11用户重新映射Z盘,确保是当前登录用户操作,并勾选「登录时重新连接」选项。
- 尝试用UNC路径替代驱动器号,绕过映射问题,例如:
let new_file_path = r"\\共享电脑主机名\共享文件夹名\NUOVO RAPPORTINO ELETTRONICO\2024\1 Gennaio\Name Surname";
3. 验证手动操作与SMB设置
- 在Win11电脑上手动打开Z盘,尝试创建
1 Gennaio\Name Surname目录:- 如果手动失败:排查共享文件夹的权限设置(确保写入权限)、Win11的SMB功能(控制面板→程序→启用或关闭Windows功能,确认SMB 3.0/2.0已启用)。
- 如果手动成功:说明问题出在代码或程序运行环境。
4. 确认程序运行权限
- 避免在Win11上用管理员权限启动程序,除非Z盘是管理员账户映射的。
- 检查程序是否被Windows Defender或其他安全软件拦截,临时关闭防护后测试。
内容的提问来源于stack exchange,提问作者DP1000
相关产品推荐
相关产品推荐

