“文件仍在使用中”:如何释放所有资源/强制删除文件?

时间:2014-03-17 16:47:02

标签: r windows file delete-file

问题:如何释放R正在使用的所有文件处理程序/连接?在Python中,人们可以看看哪些对象仍然存在。 R中有什么可比的吗?

在一个函数中,我创建了一个包含一些文件的目录。在函数结束时,应该再次删除它。我面临的问题是我无法删除文件,大概是因为文件处理程序仍处于打开状态。示例是使用MetaSKAT包,但我对一般解决方案感兴趣。示例数据可在此处找到:https://groups.google.com/group/skat_slee/attach/28a76339619d8358/Datasets.zip?part=4&authuser=0

# Code author: Seunggeun (Shawn) Lee
setwd('./Datasets')
foo <- function(dir.name) {
  ###### Preparation stuff ################################################
  if (!require(MetaSKAT)) {install.packages('MetaSKAT'); require(MetaSKAT)} 
  dir.create(file.path('.',dir.name),showWarnings=F)
  dir.path <- paste("./",dir.name,sep="")
  file.copy(c("01.fam","01.bed", "01.bim", "01_3.SetID"), dir.path)
  setwd(dir.path)
  FAM<-read.table("01.fam", header=FALSE)
  y<-FAM[,6]
  N.Sample<-length(y)
  x1<-rnorm(N.Sample)
  x2<-rbinom(N.Sample,1, 0.5)
  obj <-SKAT_Null_Model(y~cbind(x1, x2))
  re  <-Generate_Meta_Files(obj, "01.bed", "01.bim", "01_3.SetID", "01.MSSD", "01.MInfo", N.Sample)

  ###### Problem #######################################################
  print(file.remove(list.files(), force = T)) # problem: cannot delete
  # curiously, sometimes there is 1, sometimes 2 False...

  ###### my different tries to solve it ################################
  rm(re)
  closeAllConnections()
  sink.number() # shows 0
  rm(list = ls())
  gc()

  ######  problem is still there  ######################################
  print(file.remove(list.files())) 
  setwd('..')
#   print(unlink(dir.path, recursive = T)) # I want finally delete the directory
}
debug(foo)
foo("temp2")

我正在使用R Studio。即使在R仍处于打开状态时尝试在Windows中手动删除它,它也会告诉我该文件是由程序使用的。我只能在关闭R后删除它。

那么如何强制R释放这些文件呢?我将尝试在根目录下解决问题并查看Generate_Meta_Files()的源代码,但我认为R中必须有一个全局函数强制释放所有内容(注意:我很清楚它没有意义为了创建文件并在之后直接删除它,这只是一个例子。)

编辑:提示后,我在Linux下尝试了。事实证明,虽然它告诉我删除一个(6个)文件有问题,所有都被正确删除,因此我想这是一个特定于Windows的问题。有什么提示这是什么?

0 个答案:

没有答案