[解決済み] Windowsにはなぜ260文字というパスの長さの制限があるのですか?
質問
この問題には、何度かタイミングが悪いときに遭遇しています。
- 深いパスのあるオープンソースの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で十分だからです。
関連
-
[解決済み] コマンドプロンプト「Net View System Error 6118」[終了しました]。
-
[解決済み] mingw-w64スレッド:PosixとWin32の比較
-
[解決済み] ファイルパスの前に付ける「୧⃛(๑⃙⃘◡̈๑⃙⃘)୨⃛」は何ですか?
-
[解決済み] WindowsのPATH環境変数にディレクトリを追加する
-
[解決済み] ファイルが存在しない場合、Windowsサービスをアンインストールするにはどうすればよいですか?
-
[解決済み] Windowsでバッチスクリプトのパスを取得する方法を教えてください。
-
[解決済み】カレントディレクトリのフルパスを取得するWindowsシェルコマンド?
-
[解決済み】Windowsサービスの "実行ファイルへのパス "の変更について
-
[解決済み】メールの件名の長さの制限について教えてください。
-
[解決済み】MYSQLのLIMITオフセットが高いと、なぜクエリが遅くなるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studioです。「プロジェクトが C ドライブに作成されている場合、「タスク ':app:mergeDebugResources' の実行に失敗しました。
-
[解決済み】cmdでdirを呼び出すと出力される。"Cドライブのボリュームにはラベルがありません。"
-
[解決済み】Npm root/administratorでこのコマンドを再度使用してみてください。
-
[解決済み] npm windows install globallyでnpm ERR!余計なお世話になる。
-
[解決済み] Ctrl Alt F8はディスプレイを切り離す?
-
[解決済み] 旧バージョンのRubyを削除する(Windowsの場合)
-
[解決済み] PowerShellでTAB文字を入力するには?
-
[解決済み] CygwinにCMakeをインストールする方法は?
-
[解決済み] Windowsのバッチスクリプトにおける"@"の意味について
-
[解決済み】Windows用の良いgrepツールは何ですか?[クローズド]