Bug #13254
Updated by Anonymous almost 8 years ago
## 概要 windows 10で使用しています。 sdカードリーダーにメディアを差していない状態で、同ドライブに Dir.exist? などを行うと、次のメッセージダイアログが表示されスクリプトの実行が一時停止します。 「キャンセル」か「続行」を2回クリックするとスクリプトが再開し、Dir.exist? であれば false を返します。 ~~~ --------------------------- ruby.exe - ディスクがありません --------------------------- ドライブにディスクがありません。 ディスクをドライブ H: に挿入してください。 --------------------------- キャンセル 再実行(T) 続行(C) --------------------------- ~~~ ## 期待する動作 現状では手動操作が必要になるため、メッセージダイアログが表示されないこと、一時停止しないことを期待します。 ## 手元での再現手順1 手元での再現手順 1) sdカードリーダーをusbにつなぎ、sdカードをセットします。 メディアを差していないsdカードリーダーをusbにつなぎます。 2) タスクトレイの「ハードウェアを安全に取り外してメディアを取り出す」からカードをアンマウントし、 sdカードおよびカードリーダーを取り外します。 3) メディアを差していないsdカードリーダーをusbにつなぎます。 4) コマンドプロンプトで diskpart から list volume すると次の状態になっています。H: がカードリーダーです。 ~~~ Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- Volume 0 E DVD-ROM 0 B メディアなし Volume 1 D NTFS Partition 931 GB 正常 Volume 2 システムで予約済み NTFS Partition 85 MB 正常 システム Volume 3 C NTFS Partition 111 GB 正常 ブート Volume 4 NTFS Partition 450 MB 正常 非表示 Volume 5 H リムーバブル 0 B メディアなし ~~~ 5) 3) irb でいくつか試すと以下のようになります。 ~~~ irb(main):001:0> Dir.exist?("h:") # 注:ここでダイアログが表示されます。閉じると次に進みます。 => false irb(main):002:0> File.stat("h:") # 注:ここでダイアログが表示されます。閉じると次に進みます。 Errno::ENXIO: No such device or address @ rb_file_s_stat - h: from (irb):2:in `stat' from (irb):2 from c:/ruby/bin/irb.cmd:19:in `<main>' irb(main):003:0> File.directory?("h:") # 注:ここでダイアログが表示されます。閉じると次に進みます。 => false ~~~ ## 手元での再現手順2 DVD ドライブの場合です。ダイアログは3回クリックすると閉じます。 a) DVD ドライブにディスクをセットします。 b) ディスクを取り出します。 c) irb での実行結果は以下のようになります。 ~~~ irb(main):001:0> Dir.exist?("e:") # 注:ここでダイアログが表示されます。閉じると次に進みます。 => false irb(main):002:0> File.stat("e:") # 注:ここでダイアログが表示されます。閉じると次に進みます。 Errno::EINVAL: Invalid argument @ rb_file_s_stat - e: from (irb):2:in `stat' from (irb):2 from c:/ruby/bin/irb.cmd:19:in `<main>' irb(main):003:0> File.directory?("e:") # 注:ここでダイアログが表示されます。閉じると次に進みます。 => false ~~~ 4) 空の DVD-ROM ドライブに同じ事をしても、ダイアログが表示されることはありません。