tmpdir
ライブラリが提供する Dir.tmpdir
メソッドを使用すると、現在のシステム上で使用可能なテンポラリディレクトリのパスを取得することができます。
require 'tmpdir'
puts Dir.tmpdir #=> 'C:/Users/maku/AppData/Local/Temp'
Dir.mktmpdir
メソッドを使用すると、適切なパスにテンポラリディレクトリを作成し、そのパスを返してくれます。
require 'tmpdir'
puts Dir.mktmpdir #=> C:/Users/maku/AppData/Local/Temp/d20151208-8924-qjbjiq
ただし、上記のように単純に Dir.mktmpdir
を呼び出してしまうと、後片付けをするためには自力でそのディレクトリを削除しなければいけません。
下記のようにブロックを渡してやると、そのブロックを抜けた時に自動的にテンポラリディレクトリを削除してくれます。
require 'tmpdir'
Dir.mktmpdir do |dir|
# dir の示すディレクトリの中で一時作業を行う
puts dir
$path = dir
end
puts Dir.exist?($path) #=> false(きれいさっぱり消されている)
tempfile
ライブラリの提供する Tempfile
クラスを使用すると、テンポラリファイルを簡単に作成することができます。
通常の Tempfile.open
メソッドの戻り値は、通常の File
オブジェクトと同じように扱うことができます。
require 'tempfile'
file = Tempfile.open('foo')
begin
# テンポラリファイルを使用した処理
puts file.path #=> 'C:/Users/maku/AppData/Local/Temp/foo20151208-7572-u08rd5'
file.puts 'Hello'
ensure
file.close
file.unlink # 必要なくなったら削除するのが望ましい
end
上記の例では unlink
メソッドでテンポラリファイルを削除していますが、unlink
せずに close
だけしておくと、後から再び open
して、テンポラリファイルに書き込んだ内容を読み出すことができます。
require 'tempfile'
file = Tempfile.open('foo')
# テンポラリファイルに書き込む
begin
file.puts 'AAA'
file.puts 'BBB'
file.puts 'CCC'
ensure
file.close # 閉じるだけで unlink はしない
end
# テンポラリファイルの内容を読み込む
file.open.each do |line|
puts line
end