1. ホーム
  2. windows

[解決済み] Windowsにはなぜ260文字というパスの長さの制限があるのですか?

2022-03-22 11:42:40

質問

この問題には、何度かタイミングが悪いときに遭遇しています。

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

なぜこのような制限があるのですか?

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

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

解決方法は?

この記事を引用する https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation

<ブロッククオート

パスの最大長制限

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

これで、1+2+256+1、つまり[drive][:˶][path][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バイトのパス文字列なのかというと、RAMは640Kで十分だからです。