def self.rewrite(name, mode = "")
unless block_given?
raise(ArgumentError, "Need to supply block to File.rewrite")
end
if mode.is_a?(Numeric) then
flag, mode = mode, ""
mode += "b" if flag & File::Constants::BINARY != 0
mode += "+" if flag & File::Constants::APPEND != 0
else
mode.delete!("^b+")
end
old_str = open(name, "r#{mode}") { |file| file.read }
old_str = old_str.clone
begin
new_str = yield(old_str)
ensure
if old_str != new_str
open(name, "w#{mode}") { |file| file.write(new_str) }
end
end
end