Windows に 260 文字のパスの長さ制限があるのはなぜですか? 質問する

Windows に 260 文字のパスの長さ制限があるのはなぜですか? 質問する

私は何度か、都合の悪いときにこの問題に直面しました。

  • 深いパスを持つオープンソースのJavaプロジェクトに取り組んでみる
  • ソース管理に深い Fitnesse wiki ツリーを保存する
  • Bazaar を使用してソース管理ツリーをインポートしようとしたときにエラーが発生しました

なぜこのような制限が存在するのでしょうか?

なぜまだ削除されていないのですか?

パス制限にはどのように対処しますか? Linux または Mac OS X に切り替えることは、この質問に対する有効な回答ではありません ;)

ベストアンサー1

この記事を引用https://learn.microsoft.com/en-us/windows/desktop/FileIO/ファイルの命名#パスの最大長制限

最大パス長制限

Windows API では (次の段落で説明するいくつかの例外を除く)、パスの最大長はMAX_PATHで、260 文字と定義されています。ローカル パスは、ドライブ文字、コロン、バックスラッシュ、バックスラッシュで区切られた名前コンポーネント、および終端のヌル文字の順序で構成します。たとえば、ドライブ D の最大パスは "D:\ some 256-character path string <NUL>" です。ここで "<NUL>" は、現在のシステム コード ページの非表示の終端のヌル文字を表します。(文字 < > は、ここでは視覚的にわかりやすくするために使用されており、有効なパス文字列の一部にすることはできません。)

1+2+256+1、つまり[ドライブ][:\][パス][null] = 260であることがわかります。256はDOS時代から妥当な固定文字列長であると推測できます。DOS APIに戻ると、システムがドライブごとに現在のパスを追跡していることがわかり、最大26(シンボル付き32)のドライブ(および現在のディレクトリ)。

INT 0x21 AH=0x47 は、「この関数は、ドライブ文字と最初のバックスラッシュのないパスの説明を返します」と述べています。したがって、システムは CWD をペア (ドライブ、パス) として保存し、ドライブ (1=A、2=B、…) を指定してパスを要求し、0 を指定すると、INT 0x21 AH=0x15 AL=0x19 によって返されたドライブのパスが想定されます。これで、256 ではなく 260 である理由がわかりました。これらの 4 バイトはパス文字列に保存されていないためです。

なぜ 256 バイトのパス文字列かというと、640K の RAM で十分だからです。

おすすめ記事