知識マップ: MAX_PATHとWindowsのパス・ファイル名の落とし穴 ── 260文字制限、予約名、末尾ドット、大文字小文字

記事「MAX_PATHとWindowsのパス・ファイル名の落とし穴 ── 260文字制限、予約名、末尾ドット、大文字小文字」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

MAX_PATH=260という制限はドライブ文字・コロン・バックスラッシュ・最大256文字のパス文字列・終端NULを合わせたWin32 API側の制限であり、NTFS自体はより長いパスを扱えるため、LongPathsEnabledとlongPathAwareを両方設定するか\?\プレフィックスを使えば260文字の壁を越えられるが、Explorerを含め長パス非対応アプリは現実に残る。.NET(Core)/.NET 5以降は長いパスを暗黙に扱うのに対し、古い.NET Frameworkは260文字超過でPathTooLongExceptionを投げる。ファイル名にはCONやNULなどの予約デバイス名が拡張子付きでも使えず、末尾のスペースやドットは正規化で黙って取り除かれるため、ユーザー入力からのファイル名生成はこれらを自前でサニタイズする必要がある。Path.Combineはルート付き引数で前段のベースパスを黙って捨てるため、ベースディレクトリ配下かの検証と組み合わせる。

MAX_PATHとファイル名の落とし穴の知識マップ260文字のMAX_PATH制限がWin32 APIの制限でありNTFS自体の限界ではないこと、長パスの有効化や\?\プレフィックスによる回避条件、予約デバイス名や末尾ドット・スペースの正規化によるファイル名の落とし穴、Path.Combineの仕様に起因するリスクとその対策の関係を示す図軽減する軽減する原因になり得る防止する原因になり得る前提とする原因になり得る軽減する防止する軽減する軽減するで構成できる原因になり得る軽減する利用する前提とする前提とする実装を担う前提とするMAX_PATH(260文字制限)予約デバイス名(CON/NUL等)パス正規化(末尾ドット・スペースの除去)長パスの有効化(LongPathsEnabled+longPathAware)\\?\プレフィックスPathTooLongException.NET(Core以降).NET FrameworkPath.Combineのルート付き引数仕様意図した保存フォルダー外への書き込みベースディレクトリ配下チェックファイル名のサニタイズ大文字小文字の保持と非区別fsutil大文字小文字区別有効化の副作用8.3短縮名NTFSパスコンポーネントの長さ上限(255文字)

概念間の関係(全19件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

MAX_PATH(260文字制限)
Win32 APIにおけるパスの最大長で、ドライブ文字・コロン・バックスラッシュ・最大256文字のパス文字列・終端NULを合わせた260文字という制限。
予約デバイス名(CON/NUL等)
CON、PRN、AUX、NUL、COM1〜COM9、LPT1〜LPT9などMS-DOS時代から続くデバイスの予約名で、拡張子を付けてもファイルではなくデバイスとして解釈される名前。
パス正規化(末尾ドット・スペースの除去)
Windowsのパス解決処理の一部で、パスが区切り文字で終わらない場合に末尾のドットとスペースをすべて取り除く規則。
長パスの有効化(LongPathsEnabled+longPathAware)
Windows 10 バージョン1607以降で、レジストリ値LongPathsEnabled=1とアプリケーションマニフェストのlongPathAware要素の両方を設定することで、多くのWin32ファイル関数からMAX_PATH制限を外せる仕組み。
\\?\プレフィックス
パス文字列の先頭に付けることで文字列の正規化と解析をスキップし、Unicode版APIでMAX_PATHを超えるパスをそのままファイルシステムへ渡せるようにする表記。
.NET(Core以降)
.NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
.NET Framework
Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。
Path.Combineのルート付き引数仕様
Path.Combineメソッドで2番目以降の引数にルート付きパスが渡されると、それより前の引数がすべて無視される.NETの仕様。
ベースディレクトリ配下チェック
Path.GetFullPathで正規化した結果がベースディレクトリ配下かどうかを検証する手法。
ファイル名のサニタイズ
GetInvalidFileNameCharsによる不正文字の置換に加え、予約デバイス名・末尾のドットやスペース・長さ上限を自前でチェックして安全なファイル名に直す処理。
大文字小文字の保持と非区別
作成時の大文字小文字を保持して表示するが、検索・比較では大文字小文字を区別しないWindowsファイルシステムの既定動作。
8.3短縮名
歴史的互換性のためNTFSが長いファイル名に対して自動生成できる、REPORT~1.DOCのような形式の短縮名。
NTFS
現行のWindowsが標準で使うファイルシステム。MFT(マスターファイルテーブル)などの構造でボリューム上のファイルを管理する。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。