顧客の1人が非常に長いパス名(長い名前の入れ子になった複数のフォルダー)を習慣的に使用しており、パスを260文字未満に短縮するために「ユーザー教育の問題」に定期的に遭遇します。
技術的な解決策はありますか?Windows 7およびWindows 2008 R2で何らかのスイッチをフリックして、「これらの歴史的な問題を無視して、+ 260文字のパス名を機能させる」と言うことができますか。
PS私は読んだことがありますが、ファイル、パス、名前空間の名前付けによって完全に教化されていません
顧客の1人が非常に長いパス名(長い名前の入れ子になった複数のフォルダー)を習慣的に使用しており、パスを260文字未満に短縮するために「ユーザー教育の問題」に定期的に遭遇します。
技術的な解決策はありますか?Windows 7およびWindows 2008 R2で何らかのスイッチをフリックして、「これらの歴史的な問題を無視して、+ 260文字のパス名を機能させる」と言うことができますか。
PS私は読んだことがありますが、ファイル、パス、名前空間の名前付けによって完全に教化されていません
回答:
メソッドはありますが、Microsoftがファイルブラウザウィジェットを再コーディングするまで、私たちはその古い問題にほとんど固執しています。それは次善策ですが、それはちょうどそれがどのように機能するかです。
ここで言及されていないトリックについて言及するだけです。
このファイルを例に取ります:
C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf
この完全なファイルパスの長さは290文字です。シェル(Windowsエクスプローラー)およびほとんどのコマンドラインユーティリティでは、おそらくユーザーがそれに触れることはできません。
subst
次のようなコマンドを使用します。
subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
これで、ファイルにアクセス(および削除、移動など)できます。
X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf
また、ファイル名は235文字程度であるため、「ファイル名が長すぎます」という問題はもう発生しません。
Windows APIには、と呼ばれる悪名高い定数がありますMAX_PATH
。MAX_PATHは260文字です。NTFSファイルシステムは、実際には最大32,767文字のファイルパスをサポートしています。また、Windows API関数のUnicode(または「ワイド」)バージョンにアクセスし、パスの先頭にを付けることにより、32,767文字の長いパス名を引き続き使用できます\\?\
。
MAX_PATH
Windowsの世界では、かなり昔に石に設定されていました。当時はANSI標準と関係があると思います...しかし、Microsoft自身が書いたものを含め、何千ものプログラムやアプリケーションを使用している現在、Microsoftにとって今では変更が非常に難しいものの1つですMAX_PATH
定数が突然変更されると、奇妙な新しい方法で失敗します。(バッファオーバーフロー、ヒープ破損など)
subst
ディレクトリジャンクションを使用するのと同様のアプローチを取っています。これは、いくつかの簡単な変更を行うだけの場合は、クリーンアップする方が便利な場合があります。Link Shell Extensionを使用しますが、mklink
次のようなコマンドを使用できますmklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
。
この制限を回避するには、\\?\ C:表記を使用します。いですが、最大2 ^ 15までのファイル長をサポートします。
http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath
c:\usr-data
、 `c:\ Users \ VeryLongUserName \ LongFolderName`へのリンクを作成し、前者を使用するように指示することができますが、彼が40文字程度のフォルダーに定期的に名前を付ける場合、これは役に立ちません...
Microsoftでは、Windows 10からこの問題を解決する修正プログラムを用意しています。これについては、MSDNの名前付けファイル、パス、および名前空間の記事で説明しています。
darthcoderは\\?\C:
表記の回避策の詳細を既に回答しましたが、現在HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
は単一のシステムのMAX_PATH制限を削除するために使用できるレジストリキーがあります。またComputer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths
、必要に応じて、組織またはグループ全体の実装でのグループポリシー制御のサポートについても説明しています。