From: Takeshi Iogawa Date: 2013-02-28T14:17:21+09:00 Subject: [ruby-list:49229] Re: PDF ファイルが Adobe Reader などで開かれているかを検知したい いおがわです。 解決策でなくて申し訳ないのですが。 これ、Ruby の問題でななくファイルの排他制御(ファイルロック・アンロック) の問題ですよね? 例えばAdobe Reader で開いているファイルは、エクスプローラから でも、cmd.exe上のmoveコマンドからでも移動に失敗すると思います。 UNIX系なら、flock() システムコールでしょうけど、Windowsの場合、 WIN32API のなかにファイルのロック・アンロックのAPIが用意されて いるようです(ざざっとぐぐったダケなので詳細はすみません) それから、仮にRuby にファイルのロック状態を確認するメソッドが あったとしても (1) PDF ファイルのロック状態を確認 (2) アンロック状態(mv OK) (3) <-------- 誰か別のひと(or 別のアプリ)が当該PDFをロック (4) mv → やっぱり失敗 というケースが発生しえます。 ということでロジックを見直したほうがよろしいかと。。。 # 具体的な方法が示せなくてごめんなさい (2013/02/28 12:42), 5.5 wrote: > 5.5 です。お世話になっております。 > > PDF ファイルを Adobe Reader で開いている場合,FileUtils.mv > などで移動することができません。 > ※Permission Denied と実行時エラーが出る。 > > そこで,事前にそういう状態であるかどうかを検知したいのです > が,できますか? > > FileTest.writable? の類いは,パーミションを見ているようで, > 上記の状態でも true が返ります。 > > > 実際に mv してみて,例外が出たらその場合の処理を行う,とい > う方法も考えられます。 > しかし,同時に他のファイル操作も行いたいのです。 > 複数のファイル操作の一つでも失敗したら全部を元に戻す,とい > うロジックもあり得るでしょうが,避けたいところです。 > > 移動が可能かどうかを,移動を実行せずに知る手段はあるでしょ > うか? > > OS は Windows です。 > -- -- Takeshi Iogawa