てきとうなメモ

本の感想とか技術メモとか

削除できないファイル

ファイル名の最後が"."とか" "とかだとExplorerから削除ができなくなる.そもそもこういうパスをWindows shellはサポートしておらず,このようなパスを渡すと正規化されて削除されてしまう.

D:\Temp>type nul > foo.txt.
D:\Temp>dir
2009/11/23  11:20    <DIR>          .
2009/11/23  11:20    <DIR>          ..
2009/11/23  11:19                 0 foo.txt
D:\Temp>del foo.txt
D:\Temp>dir
2009/11/23  11:20    <DIR>          .
2009/11/23  11:20    <DIR>          ..

そこで,"\\?\"をprefixとして絶対パスで指定すると,引数のパスに対して正規化せずに処理してくれるため削除することが可能になる.

D:\Temp>type nul > "\\?\D:\Temp\foo."
D:\Temp>type nul > "\\?\D:\Temp\foo "
D:\Temp>dir
2009/11/23  11:20    <DIR>          .
2009/11/23  11:20    <DIR>          ..
2009/11/23  11:19                 0 foo
2009/11/23  11:19                 0 foo.
D:\Temp>del foo.
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
D:\Temp>del foo.
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
D:\Temp>del "\\?\D:\Temp\foo."
D:\Temp>del "\\?\D:\Temp\foo "
D:\Temp>dir
2009/11/23  11:20    <DIR>          .
2009/11/23  11:20    <DIR>          ..
D:\Temp>

参考