RStudio中使用file.remove()无法删除tempfile()生成的临时文件如何解决
R调用file.remove()删除tempfile()创建的临时文件报权限拒绝的解决方法
出现该权限报错的核心原因是目标临时文件仍被进程占用:绝大多数情况是readr::read_csv()读取完成后底层文件句柄没有被即时释放,少数情况是刚下载的文件被系统安全软件临时锁定,你可以通过以下方法解决,全程仅使用file.remove()完成删除操作:
- 强制触发垃圾回收释放文件句柄
在read_csv()执行完成后、file.remove()执行前新增一行gc(),强制R回收未被引用的文件连接资源,该方案可以解决90%以上的同类问题。 - 添加短延迟避开系统临时锁定
如果你安装了开启实时扫描的杀毒软件,刚下载的文件会被短暂锁定进行安全扫描,你可以在读取文件后新增一行Sys.sleep(1),等待锁定解除后再执行删除。 - 确认临时文件路径未被篡改
调用file.remove()前可以执行print(tmp_filename),和报错信息中的文件路径进行比对,确认路径变量没有被其他代码意外修改、路径完全匹配。
修正后的完整代码示例:
tmp_filename <- tempfile() download.file(url, tmp_filename) dat <- read_csv(tmp_filename) gc() # 强制释放未被引用的文件连接 Sys.sleep(1) # 可选,仅存在杀毒软件频繁锁文件的情况时添加 file.remove(tmp_filename)
如果执行以上操作后仍报错,可先尝试手动删除对应临时文件,若手动删除也提示权限不足,才属于文件所有权配置问题,否则均为文件被占用导致,以上方案均可解决。
内容的提问来源于stack exchange,提问作者JEJI
相关产品推荐
相关产品推荐

