R 函数创建无法删除的文件:"无法完成操作,因为正在使用所需的项。



首先,我提前道歉,我不知道如何提供一个可重复的示例,因为我不确定是什么导致了这个问题。我会提供尽可能多的细节。我在macOS Catalina 10.15.7,使用R 4.1.0,和RStudio 1.4.1717。

我正在使用一组自定义R函数和脚本,其中一些涉及创建和写入日志文件,几乎总是logfile.txt或类似的东西。在删除旧日志文件之前,脚本包含以下行:

system("touch logfile.txt; rm logfile.txt")

使用以下结构的命令编写输出:

system(paste0('echo "Some output ', variable, ' here" >> logfile.txt'))

最后,其中一个脚本使用flock包来防止在某些并行段中同时写入:

intro.lock = flock::lock("logfile1.txt")

在写入输出后2行后解锁:

flock::unlock(intro.lock)

我的问题是,大多数时候,这些日志文件创建是不可能删除的,即使是那些不使用flock。每当我尝试删除它们时,我都会得到错误提示:"操作无法完成,因为所需的项正在使用中。"查看图片:错误信息

我试过的步骤:

  • 退出RStudio和所有其他可能正在使用该文件的应用程序
  • 通过带[sudo] rm logfile.txt的终端删除文件。得到rm: logfile.txt: Resource busy
  • 在生成日志文件的每个脚本中运行system(paste0("chflags -R nouchg,noschg logfile.txt"))
  • 使用"获取信息"查看文件是否被锁定(没有)
  • 检查lsof +D ./是否有使用这些文件的进程。

我所知道的唯一解决方案,使这些文件能够被删除是重新启动我的整个计算机。重新启动后,它们可以用任何方法删除,甚至只是拖到垃圾桶。

任何可能的解决方案都是非常感谢的。

不确定这是否会解决您的问题,但在我的一个脚本中,我使用以下命令来清理在运行结束时"留下"的特定文件:

rm(list = ls())
gc()
system("rm -R /tmp/Rtmp*")
system("rm -R /tmp/lib*.so")

相关内容

  • 没有找到相关文章

最新更新