簡體   English   中英

Ruby 自動刪除臨時文件?

[英]Ruby auto deleting temp file?

我糊塗了。 這是我的代碼:

require 'csv'                                                               
require 'tempfile'                                                          

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

p f.path 

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

我認為這是因為每次 ruby​​ 會話退出時,TempFile 都會自動從文件系統中刪除。 但是,我如何確切知道文件何時被刪除? 因為我想用它在我的 rails 應用程序中創建臨時文件,所以我擔心該文件在使用之前是否被刪除。

從文檔:

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

所以,只要你的f在范圍內,它就不會被刪除。 如果您退出 Ruby,它將被刪除。 如果您仍在使用 Ruby 但f已超出范圍,則它是不確定的(可能未刪除,但不能保證存在,不應使用。)

當臨時文件被垃圾收集時會被刪除(它不再被引用並且內存清理正在釋放對象)。

正如Ruby 文檔中所述

當一個 Tempfile 對象被垃圾收集時,或者當 Ruby 解釋器退出時,它關聯的臨時文件會被自動刪除......

只要您仍然持有對臨時對象的引用,您就不必擔心它會被過早刪除。

當我創建許多要壓縮的臨時文件時,我已經看到Tempfile在同一進程中被垃圾收集。 在下面的代碼中,如果我沒有將Tempfile句柄存儲在handles數組中,當Zip::File.open塊關閉時,我會得到運行時錯誤( Errno::ENOENT: No such file or directory @ rb_sysopen ):

handles = []
Zip::File.open(zip_file.path, Zip::File::CREATE) do |zip|
  # there are hundreds of @foos to iterate over
  @foos.each do |foo|
    cit_filename = generate_some_unique_filename
    cit_file = Tempfile.new(cit_filename)
    handles << cit_file
    cit_file.puts('some text')
    cit_file.close
    zip.add(cit_filename, cit_file.path)
  end
end # <- runtime error would have thrown at this point
handles = nil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM