長い調査の結果、最新のMicrosoft Windows 7でもパス名は256文字を超えることはできませんでした。NTFSは最大32,000文字のパスを処理できるため、このような愚かな制限がある理由はわかりません。十数年以上問題なく長さ!それを変更する可能性はありませんか?または、それを回避する実用的な解決策はありますか?
長いファイル名を持つ入れ子になった写真ディレクトリのような単純なユースケースでも、260文字はごくわずかです。
長い調査の結果、最新のMicrosoft Windows 7でもパス名は256文字を超えることはできませんでした。NTFSは最大32,000文字のパスを処理できるため、このような愚かな制限がある理由はわかりません。十数年以上問題なく長さ!それを変更する可能性はありませんか?または、それを回避する実用的な解決策はありますか?
長いファイル名を持つ入れ子になった写真ディレクトリのような単純なユースケースでも、260文字はごくわずかです。
回答:
従来のWindows APIは、最新バージョン用に開発されたアプリケーションでも、パス名を260文字に制限しています。
Unicode対応APIを使用するアプリケーションは、最大32767文字を許可する形式のパスを使用できます。ファイル名には接頭辞を付ける\\?\
必要があり、絶対パスにする必要があります(例:\\?\c:\dir\file
または)\\?\UNC\server\share\file
。さらに制限があります。詳細についてはリファレンスを参照してください。
深いファイル階層を作成して使用し、ファイル名の長さのために爆破するアプリケーションを使用する必要がある場合は、いくつかの方法を試すことができます。
このsubst
コマンドを使用して、ドライブ文字をディレクトリに割り当てます。
深いディレクトリからアプリケーションを起動し、短い相対パスを渡します。
その8.3エイリアス(でいくつかの長い名前を交換しmicros~1
、あなたが持っている場合、それらはまだWindows 7の中に存在すると仮定すると、)micros~1
と並んでmicros~2
、私は、これはどの伝える方法がわかりません。おそらくDOSを実行command.com
します(Windows 7でも引き続き実行できると仮定します)。
micros~1
、が取得するため、本質的にランダムです。
すべてのフォルダーとファイルに短い(8.3)名を使用できます。
ただし、それらが有効になっていることを確認する必要があります。
長いファイル名は、短いMS-DOS(8.3とも呼ばれる)スタイルの命名規則を超えるファイル名と見なされます。通常、Windowsは長いファイル名を特別なディレクトリエントリとしてディスクに保存しますが、特定のファイルシステムによっては、パフォーマンス上の理由でシステム全体で無効にすることができます。長いファイル名を作成すると、Windowsは、8.3エイリアスと呼ばれる短い8.3形式の名前を作成し、ディスクにも保存する場合があります。この8.3エイリアスは、指定されたボリュームに対して無効にできます。
(私の大胆な)
また、長い名前から短い名前を取得するために、いくつかのコードを記述する必要があります。
NTFSのファイル/ディレクトリ名は、長さがバイトとして保存されるため、255個のUnicodeコードポイントに制限されています。ただし、総パス長に固有の制限はありません。
多くのWin32 API呼び出し(エクスプローラーシェルを含む)呼び出しには、260-1の長さ制限があります。他の一部の呼び出しでは、\\?\プレフィックスを使用して最大32Kを取得する機能があります(ボリューム名がKernel-landで置き換えられるため、少し少なくなります)