Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > tmpdirライブラリ > Dirクラス > mktmpdir

singleton method Dir.mktmpdir

mktmpdir(prefix_suffix = nil, tmpdir = nil) -> String[permalink][rdoc] [added by tmpdir]
mktmpdir(prefix_suffix = nil, tmpdir = nil) {|dir| ... } -> object [added by tmpdir]

一時ディレクトリを作成します。

作成されたディレクトリのパーミッションは 0700 です。

ブロックが与えられた場合は、ブロックの評価が終わると 作成された一時ディレクトリやその配下にあったファイルを FileUtils.#remove_entry を用いて削除し、ブロックの値をかえします。 ブロックが与えられなかった場合は、作成した一時ディレクトリのパスを 返します。この場合、このメソッドは作成した一時ディレクトリを削除しません。

[PARAM] prefix_suffix:
nil の場合は、'd' をデフォルトのプレフィクスとして使用します。サフィックスは付きません。 文字列が与えられた場合は、その文字列をプレフィクスとして使用します。サフィックスは付きません。 2 要素の配列が与えられた場合は、一つ目の要素をプレフィクス、二つ目の要素をサフィックスとして使用します。
[PARAM] tmpdir:
nil の場合は Dir.tmpdir を使用します。 そうでない場合は、そのディレクトリを使用します。

使用例

require 'tmpdir'

puts Dir.tmpdir
# 出力例: 動作環境により出力は異なります。
#=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp
Dir.mktmpdir{|dir|
  puts dir
  # 出力例: 一時ディレクトリ の名前の先頭に'd' をつける。
  #=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp/d20081011-4524-1m69psi
  #                                            ^
}
Dir.mktmpdir("foo"){|dir|
  puts dir
  # 出力例:一時ディレクトリ の名前の先頭に'foo' をつける。
  #=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp/foo20081011-4824-pjvhwx
  #                                            ^^^
}
Dir.mktmpdir(["foo", "bar"]){|dir|
  puts dir
  # 出力例: 一時ディレクトリの名前の先頭に'foo' 、最後に'bar'をつける。
  #=> /cygdrive/c/DOCUME~1/kouya/LOCALS~1/Temp/foo20081011-5624-1hyxrqbbar
  #                                            ^^^                     ^^^
}

Dir.mktmpdir(nil, "/var/tmp") {|dir|
  puts dir
  # 出力例: tmpdir の作成先が'/var/tmp'となる。
  #         さらに、一時ディレクトリ の名前の先頭に'd' をつける。
  #=> /var/tmp/d20081011-5304-h6b13j
}

memory_dir = nil
Dir.mktmpdir {|dir|
  memory_dir = dir
  File.open("#{dir}/foo", "w") { |fp|
   fp.puts "hogehoge"
  }
}
# ブロックを抜けたら、テンポラリディレクトリは消される。
p FileTest.directory?(memory_dir) #=> false

dir = Dir.mktmpdir
# ブロックを与えない場合は、ディレクトリは存在する。
begin
  File.open("#{dir}/foo", "w") { |fp|
    fp.puts "hogehoge"
  }
ensure
  FileUtils.remove_entry_secure dir
end
p FileTest.directory?(dir) #=> false
[EXCEPTION] ArgumentError:
tmpdirが全てのユーザから書き込み可能かつ、sticky ビットが立っていない場合に発生します。作成する一時 ディレクトリを安全に削除できないためです。 アプリケーションは一時ディレクトリを他のユーザか ら書き込める権限に変更すべきではありません。