[#49193] [ANN] Ruby 2.0.0-p0 released — Yusuke Endoh <mame@...>

こんにちは。Ruby 2.0.0-p0 をリリースします。

14 messages 2013/02/24
[#49196] [ANN]Ruby-2.0.0-p0 mswin32版 MSI was Re: [ANN] Ruby 2.0.0-p0 released — arton <artonx@...> 2013/02/24

artonです。

[#49216] Windows用 インストーラ無しパッケージの需要について (Re: [ANN]Ruby-2.0.0-p0 mswin32版 MSI was Re: [ANN] Ruby 2.0.0-p0 released) — Takeshi Iogawa <alpha@246.ne.jp> 2013/02/27

いおがわと申します。 Ruby2.0の正式リリースおめでとうございます。

[ruby-list:49229] Re: PDF ファイルが Adobe Reader などで開かれているかを検知したい

From: Takeshi Iogawa <alpha@246.ne.jp>
Date: 2013-02-28 05:17:21 UTC
List: ruby-list #49229
いおがわです。

解決策でなくて申し訳ないのですが。
これ、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

In This Thread