如何在Ruby中创建临时目录?

lza*_*zap 24 ruby

如何以一种很好的方式在Ruby中创建临时目录?我还想在进程退出时自动删除它.谢谢!

mer*_*ter 37

请参阅tmpdir的文档.如果mktmpdir方法具有块,则块返回时将删除临时目录.在您的情况下,您将在没有块的情况下调用并稍后处理删除(=程序退出).

关于退出时自动删除,我认为tmpdir不会为你做那件事.但是,at_exit应该有所帮助.

举个例子,Homebrew就是这样的:

require 'tmpdir'

# rest omitted

TEST_TMPDIR = ENV.fetch("HOMEBREW_TEST_TMPDIR") do |k|
  dir = Dir.mktmpdir("homebrew-tests-", ENV["HOMEBREW_TEMP"] || "/tmp")
  at_exit { FileUtils.remove_entry(dir) }
  ENV[k] = dir
end
Run Code Online (Sandbox Code Playgroud)

  • 我想你可以澄清tmpdir会在_block_结束时删除目录,但是如果OP _really_想要在_program_的末尾删除目录,那么他可能需要at_exit. (2认同)
  • 很高兴注意到您需要`require“tmpdir”`。我不清楚,因为“Dir”位于核心中,但“Dir.mktmpdir”不是。 (2认同)
  • @Geoffroy是的,当提供一个块时,“mktmpdir”将在块退出后删除该目录,但这不是最初的问题所要求的。用例完全不同。您能详细说明一下“自制程序中所有无用的东西”吗? (2认同)

小智 6

使用Dir.mktmpdir方法,来自stdlib