class File def File.safe_write(n) i = 0 while File.exists? n + ".#{i}.tmp" i += 1 end tmpfd = File.open(n + ".#{i}.tmp", 'w') ret = yield tmpfd tmpfd.close File.rename(n + ".#{i}.tmp", n) ret end end