You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何使用R语言写入SMB共享文件夹?目录创建报错求助

解决R中无法创建SMB共享文件夹目录的问题

看起来你在R里操作SMB共享时遇到了路径格式和认证的问题,我来帮你拆解一下问题并给出可行的解决方案:

问题根源

你当前使用的路径格式 domain\\user:pwd@smb://Ipadress/folder/newfolder/ 并不是R基础文件操作函数(比如dir.create)能识别的格式——R的dir.create不支持直接在路径中嵌入SMB认证信息,也无法解析smb://这种URL风格的路径。另外你代码里的参数recurisive拼写错误,正确的是recursive,这也会导致函数执行异常。

解决方案1:挂载SMB共享为网络驱动器(最简单)

既然你已经能通过Windows资源管理器访问共享,最直接的方法是把SMB共享挂载为本地网络驱动器,然后像操作本地文件夹一样在R里使用:

  • 打开Windows资源管理器,右键点击「此电脑」→「映射网络驱动器」
  • 在「驱动器」下拉选一个未使用的盘符(比如Z:),在「文件夹」输入SMB路径 \\IPaddress\folder
  • 勾选「使用其他凭据连接」,点击完成后输入你的domain\user和密码完成挂载
  • 之后在R里直接用驱动器路径创建目录:
    dir.create(path = "Z:/newfolder", recursive = TRUE)
    

解决方案2:通过Windows命令行先建立SMB连接(无需挂载)

如果你不想挂载驱动器,可以用R调用Windows的net use命令先建立SMB连接,再用UNC路径操作:

  1. 在R中执行以下命令建立连接(替换成你的实际信息):
    system('net use \\\\IPaddress\\folder /user:domain\\user "pwd"')
    
    注意:密码如果包含特殊字符,需要用双引号包裹;路径中的反斜杠要转义成\\\\
  2. 连接建立后,用UNC路径创建目录:
    dir.create(path = "\\\\IPaddress\\folder\\newfolder", recursive = TRUE)
    # 或者用正斜杠更简洁:
    dir.create(path = "//IPaddress/folder/newfolder", recursive = TRUE)
    
  3. 操作完成后可以断开连接(可选):
    system('net use \\\\IPaddress\\folder /delete')
    

解决方案3:使用专门处理SMB的R包

如果需要更灵活的SMB操作,可以尝试smbclient包(需要先安装),它封装了SMB客户端命令:

  1. 安装包:
    install.packages("smbclient")
    
  2. 创建目录:
    library(smbclient)
    smb_mkdir("smb://IPaddress/folder/newfolder", user = "domain\\user", password = "pwd")
    

验证提示

  • 确保你的R进程有足够的权限访问SMB共享(和你在资源管理器中使用的是同一用户权限)
  • 检查SMB服务器的防火墙设置,确保允许你的机器访问SMB端口(默认445)

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

火山引擎 最新活动