2015-07-06 187 views
3

我很困惑。這裏是我的代碼:Ruby自動刪除臨時文件?

require 'csv'                
require 'tempfile'               

f = Tempfile.new('csv','/tmp')             
f.write 'just wanna test'              
f.close                   

p f.path 

如果我打開輸出路徑,它是空的。

我認爲這是因爲每次ruby會話退出時TempFile都會自動從文件系統中刪除。但是,如何確切知道文件何時被刪除?因爲我正在考慮使用它在我的Rails應用程序中創建臨時文件,所以恐怕在文件被使用之前該文件被刪除了。

回答

5

從文檔:

當垃圾收集將它視爲對象時,或者當Ruby解釋退出時,其相關聯的臨時文件被自動刪除。

所以,只要你有你的f範圍內,它不會被刪除。如果你退出Ruby,它將被刪除。如果你仍然在Ruby中,但是f已經超出範圍,它是不確定的(可能不會被刪除,但不能保證存在,不應該被使用。)

+0

對不起,我沒有看到你的答案......如果我看了,可以節省我的時間。 – Myst

+0

@Myst:不用擔心,我認爲我們相距5-10秒。 – Amadan

3

當垃圾收集時tempfile被刪除不再被引用,內存清理將釋放對象)。

Ruby documentation指出:

當垃圾收集將它視爲對象時,或者當Ruby解釋退出時,其相關聯的臨時文件被自動刪除...

只要就是你仍然持有一個參考寺廟對象,你不應該擔心它被過早刪除。