2011年5月4日水曜日

ユニークなファイルの名前の作り方

cgi のスクリプトを作成していて、cgi 間でテンポラリファイルを受け渡す必要が出てきた。純粋に cgi 間のデータの受け渡しであれば POST で行えばよいのだが、今回は最初の cgi が外部ソフトを呼び出してデータ(ファイル)の加工を行なわせ、その出力(ファイル)を次の cgi に渡すので、POST 経由だと周りくどい。

普通であれば、Tempfile を使えば一発なのだが、Tempfile はご丁寧にスクリプトの実行が終わると自動的にファイルを削除してくれる。そのため、次の cgi が走ったときには消されてしまっている。

苦肉の策で考えたのが下記のスクリプト。もっと良い方法がありそうなきもするけど。
temp_name = ''
  Tempfile.open('') {|f| temp_name = f.path+'.tmp'}