# File lib/facets/core/file/self/open_as_string.rb, line 28
def File.open_as_string(name, mode = "")

  unless block_given?
    raise(ArgumentError, "Need to supply block to File.open_as_string")
  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

  str = File.open(name, "r#{mode}") { |file| file.read } #rescue ""

  old_str = str.clone

  begin
    yield str
  ensure
    if old_str != str then
      File.open(name, "w#{mode}") { |file| file.write(str) }
    end
  end

end