わたなべです. Yukihiro Matsumoto <matz / netlab.co.jp> writes: :In message "[ruby-list:21065] Re: tempfile.rb BUG" : on 00/02/28, WATANABE Hirofumi <Hirofumi.Watanabe / jp.sony.com> writes: : :|Win95/98 だと open したまま unlink ってことになって失敗して :|るのかなあ? だとすると unlink する前に close しないとまずいか. : :closeしてからunlinkしてると思うんですが。 :あ、GCに頼ればcloseされないか。うーむ。 cygwin の source を見ると unlink は DeleteFileA API が失敗し たら delete queue に放りこんで exit 時に消すという処理が入っ てました. なんか凄い. でも Win95/98 だと消えないのかなあ? しょーがないから close する?
--- lib/tempfile.rb.orig Thu Oct 14 10:14:08 1999 +++ lib/tempfile.rb Mon Feb 28 19:34:29 2000 @@ -17,12 +17,13 @@ - def Tempfile.callback(path) + def callback lambda{ - print "removing ", path, "..." if $DEBUG - if File.exist?(path) - File.unlink(path) + @tmpfile.close if @tmpfile and not @tmpfile.closed? + Kernel::print "removing ", @tmpname, "..." if $DEBUG + if File.exist?(@tmpname) + File.unlink(@tmpname) end - if File.exist?(path + '.lock') - Dir.rmdir(path + '.lock') + if File.exist?(@tmpname + '.lock') + Dir.rmdir(@tmpname + '.lock') end - print "done\n" if $DEBUG + Kernel::print "done\n" if $DEBUG } @@ -49,3 +50,3 @@ - @clean_files = Tempfile.callback(tmpname) + @clean_files = callback ObjectSpace.define_finalizer(self, @clean_files)