加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有没有办法使Ruby临时文件永久性?

发布时间:2020-12-16 20:25:03 所属栏目:百科 来源:网络整理
导读:如果我通过Tempfile创建了一个临时文件,是否有任何方法将其复制到另一个文件,我可以使其“永久”?我想避免在关联的Tempfile实例被垃圾回收或进程终止时被删除. 在一个相关的点上,有没有办法利用Tempfile机制(或使用类似的机制)获取一个“新”文件名,而无需
如果我通过Tempfile创建了一个临时文件,是否有任何方法将其复制到另一个文件,我可以使其“永久”?我想避免在关联的Tempfile实例被垃圾回收或进程终止时被删除.

在一个相关的点上,有没有办法利用Tempfile机制(或使用类似的机制)获取一个“新”文件名,而无需创建一个名称的文件?

解决方法

不是真的.对于问题本身,请看:
ObjectSpace.undefine_finalizer(tmpfile)

Tempfile库使用Ruby ObjectSpace finalizer自动删除垃圾回收.通过使用上述行,您可以删除Tempfile删除自身的能力,如果不删除它.所以,例如:

$irb
2.0.0p0 :001 > require "tempfile"
 => true 
2.0.0p0 :002 > t = Tempfile.new("test")
 => #<Tempfile:/tmp/test20140122-6655-80p4b7> 
2.0.0p0 :003 > t.write("Hi!")
 => 3 
2.0.0p0 :004 > ObjectSpace.undefine_finalizer(t)
 => #<Tempfile:/tmp/test20140122-6655-80p4b7> 
2.0.0p0 :005 > exit
$cat /tmp/test20140122-6655-80p4b7
Hi!
$

还有别的事情要注意. Tempfile将使用系统临时文件目录,如/ tmp,操作系统会在一段时间内自动清除(例如on every boot).正因为如此,即使你“持续”了文件,你也可能需要确定它消失,或者将其移动到默认情况下不被清除的目录,如/ var / tmp(持久性的Linux目录临时文件).

至于您的第二个问题,请尝试此代码从here:

Dir::Tmpname.create('your_application_prefix') { |path| puts path }

它需要一个require“tmpdir”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读