
Windowsでは、ファイルを削除した直後に同じ名前のファイルを作ると、なぜか作成日が古いままになるという不思議な現象が発生します。
この動作の背景にあるのは、NTFSの「ファイルシステム・トンネリング」という仕組みで、バグではなく、Windowsが長年維持してきた互換性のための仕様なのです。
トンネリングとは何か
MicrosoftのベテランエンジニアRaymond Chen氏は2005年のブログ記事「The apocryphal history of file system tunnelling」でファイルシステム・トンネリングについて詳しく説明しています。
記事によると、NTFSのファイルシステム・トンネリングは、削除・リネームされたファイルのメタデータを短時間だけ記憶しておく仕組みです。
同じ名前のファイルがすぐに同じフォルダに作られると、Windowsはその記憶を使って「作成日時」や「短いファイル名(8.3形式)」との関連付けを新しいファイルに引き継ぎます。この記憶は約15秒ほどで消え、内容そのものが復元されるわけではありません。あくまで作成日時などのメタ情報だけが維持されます。
この機能が必要な理由として以下の2つがあげられています。
アプリが「安全な保存」を行うため
WindowsではWordなど多くのアプリは、ファイルを上書きする際に一時ファイルを作成→元のファイルを削除→一時ファイルを元の名前にリネームという手順を踏みます。
ユーザーから見れば「既存ファイルを保存しただけ」なのに、内部的には新規作成扱いになるため、作成日時が変わってしまいます。
このズレを防ぐために ファイルシステム・トンネリングが使われています。
古いアプリとの互換性維持
昔の16bitアプリは8.3形式の短いファイル名しか扱えません。一方Windowsは長いファイル名を扱うことができるため、この対応付を覚えておく必要がありました。
例えばFile with long name.txt → FILEWI~1.TXTという対応があったとします。長い名前を知らない古いアプリがこのファイルを保存すると、短い名前のファイルを削除 → 同じ短い名前で新規作成という動作になります。
もしトンネリングがなければ、長いファイル名との関連付けが消え、ファイル名がFILEWI~1.TXTだけになる という悲劇が起きます。
トンネリングは、こうした互換性問題を防ぐためにも欠かせない仕組みでした。
どんな操作でトンネリングが発動するのか
Microsoftのドキュメントによると、以下のような操作の組み合わせで発動します。
- 削除 → 同名ファイルを新規作成
- 削除 → 別ファイルを同名にリネーム
- リネーム → 同名ファイルを新規作成
- リネーム → 別ファイルを同名にリネーム
つまり「短時間で同じ名前のファイルが同じフォルダに現れる」ことが条件です。
まとめ
この挙動は誤動作ではなく、ファイルの歴史を守るための互換性仕様です。
アプリが安全にファイルを保存し、古いソフトでもファイル名が壊れないように、メタデータだけを短時間保持する仕組みとしてNTFSの「ファイルシステム・トンネリング」が存在します。
[via Windows Latest]
