2016-06-09 129 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

相關問題