Windowsでの最大ファイルパス長の制限の克服


36

顧客の1人が非常に長いパス名(長い名前の入れ子になった複数のフォルダー)を習慣的に使用しており、パスを260文字未満に短縮するために「ユーザー教育の問題」に定期的に遭遇します。

技術的な解決策はありますか?Windows 7およびWindows 2008 R2で何らかのスイッチをフリックして、「これらの歴史的な問題を無視して、+ 260文字のパス名を機能させる」と言うことができますか。

PS私は読んだことがありますが、ファイル、パス、名前空間の名前付けによって完全に教化されていません


3
ここに私たちは2018年にいます、そして、問題はROBOCOPYにまだ存在しています。255の制限。それを超えるものは単にビープ音を鳴らしますが、コピーしません。
–SDsolar

@SDsolar:古いバージョンのrobocopyを使用していますか?
-Naikrovek

はい、同じことを言うつもりだった-一つは、それは長いパスを処理することができますので、具体的robocopyをを使用する必要があります...
ロブ・ニコルソン

回答:


12

メソッドはありますが、Microsoftがファイルブラウザウィジェットを再コーディングするまで、私たちはその古い問題にほとんど固執しています。それは次善策ですが、それはちょうどそれがどのように機能するかです。


5
新しいもの...だ、いくつかのOSのリリースのために未確定されたMSソフトウェアのバグ、
ヒューバートKario

2
Windowsの10 1607は最終的には、ファイルブラウザの問題を修正し、巨大なパスのこの奇妙な新しい世界で活躍するにはWin32アプリケーションをだますためにいくつかの魔法を持っている:howtogeek.com/266621/...は
HackSlash

28

ここで言及されていないトリックについて言及するだけです。

このファイルを例に取ります:

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_PATHWindowsの世界では、かなり昔に石に設定されていました。当時はANSI標準と関係があると思います...しかし、Microsoft自身が書いたものを含め、何千ものプログラムやアプリケーションを使用している現在、Microsoftにとって今では変更が非常に難しいものの1つですMAX_PATH定数が突然変更されると、奇妙な新しい方法で失敗します。(バッファオーバーフロー、ヒープ破損など)


9
substディレクトリジャンクションを使用するのと同様のアプローチを取っています。これは、いくつかの簡単な変更を行うだけの場合は、クリーンアップする方が便利な場合があります。Link Shell Extensionを使用しますが、mklink次のようなコマンドを使用できますmklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
チャールズグルンワルド

10

この制限を回避するには、\\?\ C:表記を使用します。いですが、最大2 ^ 15までのファイル長をサポートします。

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath


2
ええ、私が言ったように、それを読みました(私のリンクを見てください)。しかし、どうすれば正確に恩恵を受けることができますか?たとえば、ドライブを\\?\ somethingにマップできますか。分かりません。この記事は、Windows APIを使用するプログラマを対象としています。私は、.NETでコードを実行しながら、必要に応じて、私はC ++など使用していないと、これはWindowsを使用している私の顧客のスタッフに関連するどのように見ることができませんエクスプローラと共通のファイルダイアログなど
クリストファー・エドワーズ

1
最終的にはありません。:-/悲しいことに。
クリスK

@ChristopherEdwardsフォルダー階層の下位ポイントへのジャンクションを作成できます。
ヒューバートカリオ

1
@ChristopherEdwardsではc:\usr-data、 `c:\ Users \ VeryLongUserName \ LongFolderName`へのリンクを作成し、前者を使用するように指示することができますが、彼が40文字程度のフォルダーに定期的に名前を付ける場合、これは役に立ちません...
Hubert Kario

2
7-zipは、価値があるので、幸いにも\\?\ C:表記を参照してコピーします。
マットライオンズ

9

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、必要に応じて、組織またはグループ全体の実装でのグループポリシー制御のサポートについても説明しています。


徹底的なテストの時間はありませんでしたが、これまでこのソリューションでさまざまな結果を見てきましたが、これがWindows [ファイル]エクスプローラーの問題を解決することを確認できません。
ジムニム

2
これはファイルエクスプローラーでは機能しません。システムとNTFSは長いパスを処理できますが、エクスプローラー自体が再コーディングされるまでできないためです。
ingyhere

PS、Explorerの上部にあるこのSOリンクのコピープログラムのいずれかを使用して、実際に機能させる必要があります。
ingyhere

1
良い情報!その場合は、おそらくRobocopyだけに固執します。
ジムニム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.