rubyでファイルを更新する場合
少し悩んだのでメモ。テンポラリファイルを作って上書きをする手法
require 'tempfile' orignal_file = '/var/tmp/original' # オリジナルファイルのstatを取得 orignal_file_stat = File::stat(orignal_file) basename = "sample" # tempファイル作成 temp_file = Tempfile.new(basename, "/dev/shm") # tempファイルのmode変更(デフォルト 0600) File::chmod(orignal_file_stat.mode, temp_file.path) # コンテンツ書き込み temp_file.puts "contents" # bufferを吐き出す temp_file.flush # diskへ書き込む temp_file.fsync # 移動(closeの前に移動する) FileUtils.mv(temp_file.path, orignal_file) # 閉じる(移動前に閉じるとGCで消される可能性有) temp_file.close
0 件のコメント:
コメントを投稿