Ruby 初心者スレッド Part 27at TECHRuby 初心者スレッド Part 27 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト981:デフォルトの名無しさん 09/05/15 21:02:24 次スレ立てろよカス 982:デフォルトの名無しさん 09/05/16 04:43:41 ruby1.8.6です。 ファイルアクセスが他のソフトとぶつかる場合で質問です。 Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと 他のソフトによるXML読み込みが衝突した場合(と思われる時)、 in 'initialize': Permission denied - new XML.xml (Errno::EACCES) というエラーメッセージが出ます。 そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、 あるいは別の方法で衝突を回避したく思います。 何か良い方法はありますでしょうか? なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを 託すことにしました。 983:デフォルトの名無しさん 09/05/16 04:59:41 Rubyあんま関係ないな ファイルロック(またはロックファイル)でぐぐれ たいていの場合両方のソフトが対応してないといけないが、 たいていの場合相手のソフトはそんなもん作ってない なお、直接 File.open(path,'w'){|f| f.write(data)} するのではなく File.open(path_v,'w'){|f| f.write(data)} File.rename(path_v, path) と、ファイル移動をOS任せにしたほうがファイル書き込みアクセス衝突の可能性自体は減る ただし、これだと rename でファイルを掴むまでに起こったディスク上の変更を検知できない このへんの衝突可能性に気を遣ってるソフトはあらゆる永続的データ保存に「別名保存→名前変更」のプロセスを使ってるので そのソフトの使ってる別名保存名がわかればもしかしたらロックファイルのように使えるかもしれない 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch