2016-06-09 122 views
0

我想使用(可能)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还是文本,只持续30分钟,然后被删除或擦除?目前我正在运行Windows 7

+0

'睡眠(60 * 30)'会做到这一点。如果您在等待文件被删除时还有其他事情要做,请将其放在一个单独的线程中,但正如@Nabeel所说的那样,“cron”是要到这里去的路。 –

+0

为什么你需要这个文件30分钟?你想达到什么目的? – spickermann

+0

@spickermann我实际上无法告诉你为什么我需要这个特定时间的文件,但我可以告诉你它需要复制到剪贴板的程序,我希望文件可以被访问如果你知道我的意思,如果你用别的东西覆盖剪贴板?值得注意的是信息_CANNOT BE CACHED OVERNIGHT_,所以我需要一段时间的备份才能实现我想要做的事 – HelloHelloHello

回答

1

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

+0

我很想使用'cron'作业,我可能应该指定我运行Winodws 7 – HelloHelloHello

+0

Windows有一个任务调度程序:),你可以调用你喜欢的任何脚本。以下链接可能有所帮助:http://www.howtogeek.com/201930/how-to-automatically-delete-files-in-your-download-folder-on-a-schedule/。 –

1

Tempfile documentation具有本实施例中示出了如何以使要删除的文件:

显式接近

当垃圾收集将它视为对象时,或者当Ruby解释退出时,其相关联的临时文件被自动删除。这意味着在使用后没有必要显式删除一个临时文件,尽管这样做很好:不明确地删除未使用的临时文件可能会在文件系统上留下大量的临时文件,直到它们被垃圾收集为止。这些临时文件的存在可能会导致难以确定新的Tempfile文件名。

因此,每个人都应该打电话取消链接或接近在保证块,像这样:

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

你可以使用一个Timeout强制文件的接近,或者你可以sleep 60 * 30内创建文件后begin块。

+0

在单线程中运行“sleep 60 * 30”会迫使我的程序保持运行?或者有什么方法可以在后台运行它? – HelloHelloHello

相关问题