web-dev-qa-db-ja.com

ウィンドウの256文字のパス名の制限

長い調査の結果、最新のMicrosoft Windows 7でもパス名は256文字以下であることが最終的にわかりました。NTFSは最大32,000文字のパスを処理できるため、このような愚かな制限がある理由はわかりません。十数年以上も問題ない丈!それを変える可能性はありませんか?それを回避するための実用的な解決策はありますか?

長いファイル名を持ついくつかのネストされた写真ディレクトリのような単純なユースケースの場合でも、260文字はごくわずかです。

18
nils

Microsoftによると:

  • 従来のWindows APIでは、最新バージョン用に開発されたアプリケーションであっても、パス名は260文字に制限されています。

  • Unicode対応のAPIを使用するアプリケーションは、最大32767文字を許可する形式のパスを使用できます。ファイル名の前には\\?\を付ける必要があり、絶対パスでなければなりません(例:\\?\c:\dir\fileまたは\\?\UNC\server\share\file)。さらに制限があります。詳細についてはリファレンスをご覧ください。

深いファイル階層を作成して使用でき、ファイル名の長さが原因で爆撃されるアプリケーションを操作する必要がある場合は、いくつか試すことができます。

  • mklink コマンドを使用して シンボリックリンク を作成し、それらを使用するパスをアプリケーションに渡します。

  • subst コマンドを使用して、ドライブ文字をディレクトリに割り当てます。

  • 深いディレクトリからアプリケーションを起動し、短い相対パスを渡します。

  • 一部の長い名前を8.3エイリアス(micros~1)で置き換えます。これらはWindows 7にまだ存在すると仮定します。micros~1micros~2がある場合、どちらがどれであるかを知る方法がわかりません;おそらくDOS command.comを実行します(ここでも、Windows 7がまだ実行できると想定しています)。

すべてのフォルダーとファイルに短い(8.3)名を使用できます。

ただし、それらが有効になっていることを確認する必要があります。

長いファイル名は、短いMS-DOS(8.3とも呼ばれます)スタイルの命名規則を超えるファイル名と見なされます。通常、Windowsは長いファイル名を特別なディレクトリエントリとしてディスクに保存します。特定のファイルシステムによっては、パフォーマンス上の理由からシステム全体で無効にすることができます。長いファイル名を作成すると、Windowsは8.3エイリアスと呼ばれる短い8.3形式の名前も作成し、ディスクに保存することもあります。 この8.3エイリアスは、指定されたボリュームに対して無効にできます。

(私の太字)

また、ロングネームからショートネームを取得するためのコードを記述する必要があります。

ソース

0
ChrisF

長さはバイトとして格納されるため、NTFSのファイル/ディレクトリ名は255のUnicodeコードポイントに制限されています。ただし、総パス長に固有の制限はありません。

多くのWin32 API呼び出し(Explorer Shellを含む)呼び出しには、260-1の長さの制限があります。他のいくつかの呼び出しでは、接頭辞\\?\を使用して32Kまで取得できます(ボリューム名がカーネルランドで置き換えられるため、少し少なくなります)。

0
Dominik Weber