Method: File.atomic_open
- Defined in:
- lib/core/facets/file/atomic_open.rb
.atomic_open(file_name, mode = "r", temp_dir = nil, &block) ⇒ Object
Same as File.open, but acts on a temporary copy of named file, copying the file back to the original on completion.
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/core/facets/file/atomic_open.rb', line 13 def self.atomic_open(file_name, mode="r", temp_dir=nil, &block) temp_dir = temp_dir || Dir.tmpdir temp_file = Tempfile.new("#{atomic_id}-" + basename(file_name), temp_dir) if File.exist?(file_name) FileUtils.cp(file_name, temp_file) end open(temp_file, mode, &block) FileUtils.cp(temp_file, file_name) end |