2005年07月25日

ジャンクションだめじゃん

最近新マシンを調達したので、前々からやってみたかったWindowsでUnixライクに小さいユーザー権限と用途ごとに分かれたディスク構成を組んで見ているのですが、その最中に落とし穴を発見して現在へこんでいるところです。

その落とし穴とは「WindowsXPのNTFSにて別のドライブをジャンクション(リバースポイント)にてマウントすると、エクスプローラーからはそのパスからは下位にあるフォルダが削除できない」というもの

まぁ、簡単に説明すると「C:\HOGE」にDドライブをマウントしてやると「C:\HOGE\foo」をゴミ箱に入れられないというもの。
(なお「D:\foo」ならふつうに削除できる)

これはどうやら昔から脈々と続くエクスプローラのバカバグのようで

  • Windows 2000では、異なるドライブに対してジャンクションを張ると、そのジャンクションの下にあるファイルやフォルダはエクスプローラから削除できません(ジャンクションを張った先の本来のパス経由なら削除できます)。これは実際には異なるドライブにあるものをごみ箱に入れようとして失敗するためです。ようするにエクスプローラのバグです。その証拠にWindows 2000純正の「ディスクの管理」を使って作成したマウントポイントでも同じ現象が発生しますし、コマンドプロンプトからは問題なく削除できます。(2003/01/01追記)Windows XPではこのバグは修正されましたが、ゴミ箱へ入れるためにドライブ間でコピーを行うというかなり本末転倒な動作を行うようです。
ということで、ジャンクションなんて一切考慮せずに別のドライブのごみ箱に捨てようとするのが原因のようです。
(実際、ごみ箱に入れないようにシフト押しながらの削除(直接削除)ではちゃんと消えます)

また、上記ではWinXPなら大丈夫とありますが、大丈夫なのはファイルだけで、フォルダはやっぱりだめなようです(苦笑)

まぁ、アプリケーションからの削除の場合はたいていごみ箱なんて意識しないので問題ありませんし、ジャンクションしているドライブ自体もマウントしておけばごみ箱も使って削除できるので、ちょっと面倒になる以外は誤爆で大事なフォルダを消しちゃうこともないという利点もあるので、このまましばらく使ってみようと思います。

っていうか、ジャンクションって便利なのにエクスプローラはさっぱり対応する気がないらしくって

なんていう致命的なバグがあったりします。

シェルがちゃんと対応していればもっと流行るはずの技術なんですが、エクスプローラがこれで、エクスプローラ代替も決定打が無い現在では、ジャンクションを使うのは「おすすめできない」と言わざるを得ない感じです。

ちなみに、脱エクスプローラをねらってMDIEを使っていた時期がありましたが

  • 「元に戻す」が無い
  • 大きなファイルの移動中に、そのタブが操作を受け付けない
  • 圧縮ファイルをフォルダとして扱うDLLがあると開くが必ず優先になる
  • 作者さんがそれらを何とかする気がない
  • てか、作者さん春から行方不明
ということで結局使うのやめてしまいました。

ぶっちゃけエクスプローラと全く同等の機能があって、でジャンクション周りだけ解決してくれればそれでいいので、そんな素敵なファイラを誰か作ってくれませんかねぇ(他力本願(笑))

Posted by Takuchan at 2005年07月25日 03:00 | トラックバック(0)

「リンク作成シェル拡張」というソフトを利用すると、エクスプローラで「リンクを削除すると中身も削除」については回避できます

Posted by: d at 2007年04月13日 14:49