FILE_FLAG_DELETE_ON_CLOSE でファイルを開いたけど、やっぱり削除したくない
一度 FILE_FLAG_DELETE_ON_CLOSE フラグを指定してファイルを開くと、後から「やっぱり削除したくない」と変更することはできない。しかし、別の方法で目的を達成できる。
背景メモ
Windows APIの低レイヤー機能に関する技術解説。Raymond Chenが執筆する「The Old New Thing」は、Microsoftのエンジニアによる長寿ブログで、Windows内部の仕様や歴史的な設計判断、開発者が陥りがちな落とし穴を解説することで知られる。
- `FILE_FLAG_DELETE_ON_CLOSE` は、ファイルハンドルを閉じたときに自動でファイルを削除するWin32フラグ。一時ファイルの作成などに使われるが、一度指定すると削除を「撤回」するAPIは存在しない。
- 本記事は「どうしても削除を回避したい場合」の代替ワークアラウンドを扱っているが、ブログの方針として本体記事は極めて短く、真の内容はしばしば読者のコメント欄に展開される。
- この手の「できません」→「でも裏技はある」というスタイルは、Windowsプログラマの間では古典的な文体として有名。