一般的にrubyでファイルの中身を置換しようとした場合
ruby
1 # 読み取り専用でファイルを開き、内容をbufferに代入 2 buffer = File.open(path, "r") { |f| f.read() } 3 # bufferの中身を変換 4 buffer.gsub!(@pattern, @replacement) 5 # bufferを元のファイルに書き込む 6 File.open(path, "w") { |f| f.write(buffer) }
のように記述することが多いと思いますが、この置換部分を排他的にする方法はないのでしょうか?
これではブロックが閉じられた際にクローズ処理が行われるためたとえf.flock(File::LOCK_EX)
でロックをかけていてもアンロックされてしまいます。
もしreadとwriteの間でファイルに書き込み等があった場合に、最新ではないデータで誤った更新をしてしまうかと思います。
思いつかないので質問させていただきました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/31 08:11
2018/08/31 08:15
2018/08/31 08:30