MAX_PATH を超えた場合の挙動

Win32 API (のファイル操作系)を叩く際に気になるものとして MAX_PATH の存在があります.例えば,MoveFile などの関数においても指定されたパスの長さが MAX_PATH (256 文字?) を超えると失敗します.ただ,この制限はパスの頭に "\\?\" と言う文字列を追加すると緩和されるそうです.

Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加してください。詳細については、MSDN ライブラリの「」(ファイル名の規則)を参照してください。

MoveFileEx 関数 - MSDN

このオプションが気になったので,実際に接頭辞を付加して実行してみた結果が以下の画像になります.

確かに MoveFileEx 関数で移動させる事はできたのですが,エクスプローラーからだと,開く事も,移動する事も,削除する事もできない と言う完全に詰んだ状態になってしまいました.上図のように右クリックで表示されるコンテキストメニューも,どこかでエラーが発生したようで「開く」と「送る」以外表示されないと言うおかしな状態になっています.

そんな訳で,MAX_PATH を超えるようなパス構造にはならないようにするのが無難なようです.