知識マップ: 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はルート付き引数で前段のベースパスを黙って捨てるため、ベースディレクトリ配下かの検証と組み合わせる。
flowchart LR
accTitle: MAX_PATHとファイル名の落とし穴の知識マップ
accDescr: 260文字のMAX_PATH制限がWin32 APIの制限でありNTFS自体の限界ではないこと、長パスの有効化や\?\プレフィックスによる回避条件、予約デバイス名や末尾ドット・スペースの正規化によるファイル名の落とし穴、Path.Combineの仕様に起因するリスクとその対策の関係を示す図
max_path["MAX_PATH(260文字制限)"]
reserved_device_name["予約デバイス名(CON/NUL等)"]
path_normalization["パス正規化(末尾ドット・スペースの除去)"]
long_path_enable["長パスの有効化(LongPathsEnabled+longPathAware)"]
long_path_prefix["\\?\プレフィックス"]
path_too_long_exception["PathTooLongException"]
dotnet[".NET(Core以降)"]
dotnet_framework[".NET Framework"]
path_combine["Path.Combineのルート付き引数仕様"]
directory_traversal_risk["意図した保存フォルダー外への書き込み"]
path_containment_check["ベースディレクトリ配下チェック"]
filename_sanitization["ファイル名のサニタイズ"]
filename_case_handling["大文字小文字の保持と非区別"]
fsutil["fsutil"]
case_sensitivity_side_effect["大文字小文字区別有効化の副作用"]
eight_dot_three_name["8.3短縮名"]
ntfs["NTFS"]
path_component_limit["パスコンポーネントの長さ上限(255文字)"]
long_path_enable -->|"軽減する"| max_path
long_path_prefix -.->|"軽減する"| max_path
max_path -.->|"原因になり得る"| path_too_long_exception
dotnet -.->|"防止する"| path_too_long_exception
dotnet_framework -.->|"原因になり得る"| path_too_long_exception
dotnet_framework -.->|"前提とする"| long_path_enable
path_combine -.->|"原因になり得る"| directory_traversal_risk
path_containment_check -->|"軽減する"| directory_traversal_risk
filename_sanitization -->|"防止する"| reserved_device_name
filename_sanitization -->|"軽減する"| path_normalization
long_path_prefix -->|"軽減する"| path_normalization
filename_case_handling -->|"で構成できる"| fsutil
filename_case_handling -.->|"原因になり得る"| case_sensitivity_side_effect
eight_dot_three_name -.->|"軽減する"| max_path
ntfs -.->|"利用する"| eight_dot_three_name
ntfs -->|"前提とする"| path_component_limit
filename_sanitization -->|"前提とする"| path_component_limit
ntfs -->|"実装を担う"| filename_case_handling
path_containment_check -->|"前提とする"| path_normalization
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 長パスの有効化(LongPathsEnabled+longPathAware)はMAX_PATH(260文字制限)を軽減します。
- \?\プレフィックスはMAX_PATH(260文字制限)を軽減します。
- MAX_PATH(260文字制限)はPathTooLongExceptionの原因になることがあります。
- .NET(Core以降)はPathTooLongExceptionを防ぎます。
- .NET FrameworkはPathTooLongExceptionの原因になることがあります。
- .NET Frameworkは長パスの有効化(LongPathsEnabled+longPathAware)を前提とします。
- Path.Combineのルート付き引数仕様は意図した保存フォルダー外への書き込みの原因になることがあります。
- ベースディレクトリ配下チェックは意図した保存フォルダー外への書き込みを軽減します。
- ファイル名のサニタイズは予約デバイス名(CON/NUL等)を防ぎます。
- ファイル名のサニタイズはパス正規化(末尾ドット・スペースの除去)を軽減します。
- \?\プレフィックスはパス正規化(末尾ドット・スペースの除去)を軽減します。
- 大文字小文字の保持と非区別はfsutilで構成できます。
- 大文字小文字の保持と非区別は大文字小文字区別有効化の副作用の原因になることがあります。
- 8.3短縮名はMAX_PATH(260文字制限)を軽減します。
- NTFSは8.3短縮名を利用します。
- NTFSはパスコンポーネントの長さ上限(255文字)を前提とします。
- ファイル名のサニタイズはパスコンポーネントの長さ上限(255文字)を前提とします。
- NTFSは大文字小文字の保持と非区別の実装を担います。
- ベースディレクトリ配下チェックはパス正規化(末尾ドット・スペースの除去)を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。