如何使用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路径操作:
- 在R中执行以下命令建立连接(替换成你的实际信息):
注意:密码如果包含特殊字符,需要用双引号包裹;路径中的反斜杠要转义成system('net use \\\\IPaddress\\folder /user:domain\\user "pwd"')\\\\ - 连接建立后,用UNC路径创建目录:
dir.create(path = "\\\\IPaddress\\folder\\newfolder", recursive = TRUE) # 或者用正斜杠更简洁: dir.create(path = "//IPaddress/folder/newfolder", recursive = TRUE) - 操作完成后可以断开连接(可选):
system('net use \\\\IPaddress\\folder /delete')
解决方案3:使用专门处理SMB的R包
如果需要更灵活的SMB操作,可以尝试smbclient包(需要先安装),它封装了SMB客户端命令:
- 安装包:
install.packages("smbclient") - 创建目录:
library(smbclient) smb_mkdir("smb://IPaddress/folder/newfolder", user = "domain\\user", password = "pwd")
验证提示
- 确保你的R进程有足够的权限访问SMB共享(和你在资源管理器中使用的是同一用户权限)
- 检查SMB服务器的防火墙设置,确保允许你的机器访问SMB端口(默认445)
内容的提问来源于stack exchange,提问作者Jesus




