Mik*_*ike 31 ruby ruby-on-rails
使用Ruby on Rails获取其中没有任何内容的临时目录的最佳方法是什么?我需要API与跨平台兼容.stdlib tmpdir不起作用.
Jus*_*ner 51
该Dir对象有一个方法mktmpdir,它创建一个临时目录:
require 'tmpdir' # Not needed if you are using rails.
Dir.mktmpdir do |dir|
  puts "My new temp dir: #{dir}"
end
执行块后将删除临时目录.
小智 19
Dir#tmpdirRuby核心中的函数(不是您链接到的stdlib)应该是跨平台的.
要使用此功能,您需要require 'tmpdir'.
fgu*_*len 13
我现在正在使用的一般aprox:
def in_tmpdir
  path = File.expand_path "#{Dir.tmpdir}/#{Time.now.to_i}#{rand(1000)}/"
  FileUtils.mkdir_p path
  yield path
ensure
  FileUtils.rm_rf( path ) if File.exists?( path )
end
所以在你的代码中你可以:
in_tmpdir do |tmpdir|
  puts "My tmp dir: #{tmpdir}"
  # work with files in the dir
end
当您的方法完成后,临时目录将自动删除.
小智 5
Ruby 有 Dir#mktmpdir,所以只需使用它。
require 'tempfile'
Dir.mktmpdir('prefix_unique_to_your_program') do |dir|
    ### your work here ###
end
见http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tmpdir/rdoc/Dir.html
或者使用进程和线程唯一的 Tempfile 临时文件构建您自己的临时文件,因此只需使用它来构建快速 Tempdir。
require 'tempfile'
Tempfile.open('prefix_unique_to_your_program') do |tmp|
  tmp_dir = tmp.path + "_dir"
  begin
    FileUtils.mkdir_p(tmp_dir)
    ### your work here ###
  ensure
    FileUtils.rm_rf(tmp_dir)
  end
end
有关可选的后缀/前缀选项,请参阅http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html。