読者です 読者をやめる 読者になる 読者になる

うならぼ

どうも。

iTunesのDownloadsディレクトリを別ドライブに移動する話

WinAPI Windows

Appの更新が溜まっていたので一気にやってしまおうかと思ったんですが、HDDががりがり言っててあれなので一時ディレクトリたるDownloadsだけでも他所に追い出してやろうかと。基本は簡単で、ジャンクション張るだけです。Link Shell Extension使うと便利です。日本語化もされています。

と思ったらそうはいかなかった。Downloadsにはダウンロードしかけているのだけど、そこからMobile Applicationsに移動してくれない。エラーも何も出ない。むむむ。

別ドライブだとだめ

Process Monitorを使って、ジャンクションを使わない(成功する)パターンと挙動を比較してみると、どうも移動がうまくいっていないみたい。正確には、MoveFileExの処理でCreateFileはあるのにSetRenameInformationFileがない。ん、Rename?

MoveFileExはファイル名の変更で済まそうとするので、MOVEFILE_COPY_ALLOWED を指定しないとコピー&削除によるドライブをまたいだ移動をしてくれないようで。これに引っかかっている気がする。

移動先であるMobile Applicationsも同じドライブにリンクを張ることで解決。

ジャンクションが消される

ところが今度はひとつダウンロードするたびに両ディレクトリのジャンクションが消えてしまう。中身が空っぽならわかるけど。

再びProcessMonitorとにらめっこすると、あれ、中身確認せずにいきなりRemoveDirectory呼んでるじゃん。普通のディレクトリの場合、中身が空でなければエラーを返すだけなのでこれでも確かにいける。でもジャンクションは(リンク先の中身に関わらず)消せてしまう。

・・・消せなきゃいいんだな?

f:id:unarist:20160428031521p:plain

両ジャンクションに削除権限を拒否するACLを設定することで、無事(?)消えなくなった。

ところで

圧縮されたものをダウンロードして展開するとかならいざ知らず、ダウンロードしたipaファイルをそのまま移動してるだけなのだから、Downloadsディレクトリを別ドライブに移すメリットってさほどないのでは・・・一応ランダムアクセスは抑えられるか・・・?