R更新至4.1.1后调用file.remove删除文件提示Permission denied排查
R 4.1.1升级后文件占用无法删除报错排查方向
触发报错的核心代码片段:
write_csv(VPTS, "temp.csv") VPTS <- read_csv("temp.csv", col_types = cols()) file.remove("temp.csv")
对应报错信息:
In file.remove("temp.csv") : cannot remove file 'temp.csv', reason 'Permission denied'
可按以下方向逐一排查:
- 验证readr包句柄泄漏问题:
write_csv与read_csv均为readr包提供的函数,适配R 4.1.1的高版本readr存在文件连接未自动释放的已知问题。可在read_csv执行后、file.remove执行前插入closeAllConnections(),测试文件是否可正常删除。 - 排查惰性读取机制影响:高版本readr默认使用vroom作为底层读取引擎,默认启用惰性读取,文件读取完成后不会立即释放句柄,仅当关联对象被回收时才会释放资源。可修改
read_csv调用参数,添加lazy = FALSE强制读取完成后立即释放文件,验证问题是否复现。 - 验证GC触发逻辑:在
read_csv执行后插入gc()指令主动触发垃圾回收,释放未被引用的资源句柄,排查是否为自动GC未触发导致的句柄残留。 - 交叉验证IO函数兼容性:将读写逻辑替换为R原生的
write.csv()与read.csv()执行测试,如果原生函数无文件占用问题,即可锁定问题根源为readr包与R 4.1.1的版本兼容问题。 - 定位句柄持有进程:打开Windows资源监视器,在「关联句柄」栏目搜索
temp.csv,查看持有该文件句柄的具体模块,可直接定位未释放资源的依赖库。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

