You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:12:45