如何创建临时文件并在一定时间后删除它

时间:2016-06-09 19:06:11

标签: ruby file time

我想使用(可能)Ruby的tempfile库创建一个文件,但是我希望这个文件持续大约30分钟。

例如:

require 'tempfile'

def create_tempfile
  temp = Tempfile.new('file')
  temp.write('test')
  path = temp.path
  strt_time = Time.now
  end_time = Time.now - start_time

  if strt_time - end_time <= 1800
    temp.unlink
  else
    # do something to make the file last 30 minutes
  end
end

我不确定上面会做什么,但它得到了重点。所以我的问题是,有没有办法让我有一个文件,无论是temp还是文本,只持续三十分钟,然后被删除或删除?目前我正在运行Windows 7

2 个答案:

答案 0 :(得分:1)

除非您希望Ruby脚本运行30分钟,否则这是不可能的。将文件存储在特定文件夹(例如/tmp)中并让Cron作业自动擦除超过特定时间的文件可能更容易。

答案 1 :(得分:1)

Tempfile documentation示例显示了如何删除文件:

  

明确关闭

     

当垃圾收集Tempfile对象时,或者Ruby解释器退出时,会自动删除其关联的临时文件。这意味着在使用后不必显式删除Tempfile,尽管这样做是很好的做法:不显式删除未使用的Tempfiles可能会在文件系统上留下大量的临时文件,直到它们被垃圾回收。这些临时文件的存在会使确定新的Tempfile文件名变得更加困难。

     

因此,应始终在确保块中调用unlink或close,如下所示:

file = Tempfile.new('foo')
begin
   ...do something with file...
ensure
   file.close
   file.unlink   # deletes the temp file
end

您可以使用Timeout强制关闭文件,也可以在sleep 60 * 30块内创建文件后begin