< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(スレッド移動)
N :次の記事(スレッド移動)
|<:前のスレッド
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
なかだです。
一時ファイルを使うときにはTempfileがありますが、時々一時ディレ
クトリの中でファイルを作りたい場合があります。
* lib/tempfile.rb (Tempfile.callback): support directory.
* lib/tempfile.rb (Tempfile::Dir): temporary directory class.
Index: lib/tempfile.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/lib/tempfile.rb,v
retrieving revision 1.19
diff -u -2 -p -r1.19 tempfile.rb
--- lib/tempfile.rb 23 Jul 2003 16:37:35 -0000 1.19
+++ lib/tempfile.rb 4 Sep 2003 07:42:46 -0000
@@ -141,5 +141,11 @@ class Tempfile < SimpleDelegator
# keep this order for thread safeness
- File.unlink(path) if File.exist?(path)
+ if File.exist?(path)
+ if File.lstat(path).directory?
+ FileUtils.rm_rf(path)
+ else
+ File.unlink(path)
+ end
+ end
cleanlist.delete(path) if cleanlist
@@ -168,4 +174,57 @@ class Tempfile < SimpleDelegator
tempfile
end
+ end
+
+ def cleanlist
+ @@cleanlist
+ end
+ end
+
+ class Dir
+ @@cleanlist = []
+
+ def initialize(basename, tmpdir=Dir::tmpdir)
+ require 'fileutils'
+ n = failure = 0
+
+ begin
+ Thread.critical = true
+
+ begin
+ tmpname = sprintf('%s/%s%d.%d', tmpdir, basename, $$, n)
+ n += 1
+ end while @@cleanlist.include?(tmpname) or File.exist?(tmpname)
+
+ Dir.mkdir(tmpname, 0700)
+ rescue
+ failure += 1
+ retry if failure < MAX_TRY
+ raise "cannot generate tempdir `%s'" % tmpname
+ ensure
+ Thread.critical = false
+ end
+ @@cleanlist << tmpname
+ @tmpname = tmpname
+ @clean_proc = Tempfile.callback([tmpname, nil, @@cleanlist])
+ ObjectSpace.define_finalizer(self, @clean_proc)
+ end
+
+ # Returns the full path name of the temporary directory.
+ def path
+ @tmpname
+ end
+
+ def each(&block)
+ Dir.foreach(@tmpname, &block)
+ end
+
+ def open(basename, *modes, &block)
+ File.open(File.join(@tmpname, basename), *modes, &block)
+ end
+
+ def clear
+ FileUtils.rm_rf(@tmpname)
+ @clean_proc.call
+ ObjectSpace.undefine_finalizer(self)
end
end
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦