NTFSでのファイル名の最大長(Windows XPおよびWindows Vista)?


261

アップロードしたファイルのファイル名を保持するデータベーステーブルを設計しています。Windows XPまたはVistaで使用されるNTFSのファイル名の最大長はいくつですか?


83
単純な質問であるはずの答えに対して、これほど多くの異なる答えを見たことがありません。199、255、256、257、260、「約30 000」、「約32 000」、および「状況による」。確かに、修飾子はありますが、これらはすべて正しいわけではありませんか?
MickeyfAgain_BeforeExitOfSO 2010

7
これは255です。これは、企業ユーザーがこれに到達できないようにアプリケーションを構築する必要があったためです。ストレージサーバーで問題が発生するためです。
RobertPitt、2011年

2
@RobertPitt。そこに何かが足りません。MSDNからの引用:「パスの最大長はMAX_PATHであり、260文字として定義されています」
Michael Olesen

7
@ Michael9000。RobertPittはパスの制限ではなく、ファイル名の制限(この質問についての質問です)を引用していたと思います。
gdw2

7
NTFSはMAX_PATHに制限されていません。WindowsシェルはMAX_PATHに制限されています。NTFSの最大パス長は32kです
paulm

回答:


286

ファイル名の個々のコンポーネント(つまり、パスに沿った各サブディレクトリと最終的なファイル名)は255文字に制限されており、パスの全長は約32,000文字に制限されています。

ただし、Windowsでは、MAX_PATH値(ファイルの場合は259文字、フォルダーの場合は248文字)を超えることはできません。見る詳細については、http://msdn.microsoft.com/en-us/library/aa365247.aspxを参照してください。


4
この回答を裏付けるいくつかの事実を以下に示します(Windowsは通常260文字に制限されています): msdn.microsoft.com/en-us/library/…およびblogs.msdn.com/b/bclteam/archive/2007/02/13 /…
マイケルオレセン

62
提供されたリンクによると、WindowsではなくNTFSに対して正しい:「Windows API(次の段落で説明するいくつかの例外を除きます)では、パスの最大長はMAX_PATHであり、260文字として定義されています」。トータルのパスは、259文字に制限され、すべての実用的な目的のために(ヌルターミネータを可能にする)されています。
Lawrence Dol

9
どうやら、Windows APIファイルメソッドの「Unicodeバージョン」を使用する場合、パス名の前に「\\?\」を付けると、最大32767を取得できますか?
rogerdpack 2012

6
@rogerdpack:フルパスの場合、はい。ただし、個々のコンポーネント(サブフォルダー/ファイナルファイル)には、255 utf-16コードポイントの制限があります。さらに、通常のソフトウェアはMAX_PATHを想定しているため、... ブーム :)
snemarch

5
Windowsの10(バージョン1607 -周年記念アップデート)ではおよびWindows Server 2016は、グループポリシーのエントリがコンピュータの構成の下でNTFS長いパスを有効にオーバーライドすることにより、MAX_PATHの問題を無視するオプションを持っている縫い目- > [管理用テンプレート] - > [システム] - > [ファイルシステム:
スティーブンマークフォード

28

257文字です。正確に言うと、NTFS自体は、数千文字の最大ファイル名長(約30'000程度)を課します。ただし、Windowsでは、パスとファイル名の最大長は260です。ドライブ+フォルダーは3文字以上を占めるため、257になります。


21
誤り-NULターミネータはMAX_PATHの一部であり、256パスの最大パスが残ります(255の個々のコンポーネントの制限のために作成できません)。
snemarch

4
「個々のコンポーネントの制限が255のため、作成できません」間違っています。ここでは、個々のパスコンポーネントの最大長ではなく、最大パス長について説明します。さらに、「APIを使用してディレクトリを作成する場合、指定されたパスは8.3ファイル名を追加できないほど長くすることはできません(つまり、ディレクトリ名はMAX_PATH-12を超えることはできません)。」
Ludovic Kuty 14

この議論は、256文字がnullであるという前提で低レベルのAPIがファイル名256文字の作成を許可するために発生しますが、ファイルはネイティブアプリケーションにアクセスできなくなり(非表示になり)、一般に役立ちません。
コンラッドB

1
@LudovicKuty:実際には、OPはパスの長さではなく、ファイル名の長さの制限について話していました(はい、元のリビジョンでも確認しました)。そして、彼/彼女はNTFSの制限に特に言及しており、OS、特定のサブシステム、API、フレームワークの制限に言及していませんでした。
0xC0000022L 2018年

@ 0xC0000022Lはい、確かに。私はそれをOPの質問で誤解し、ファイル名の長さとパスの長さについて話すコメントに焦点を当てました。
Ludovic Kuty

27

これは、長いファイル名でファイルを保存しようとしたときに、フレームワーク4.5で「未処理の例外」と言われるものです。

指定されたパス、ファイル名、またはその両方が長すぎます。完全修飾ファイル名は260文字未満である必要があり、ディレクトリ名は248文字未満である必要があります。

スクリーンショット


16

Windows XP NTFSで199、チェックしたところです。

これは理論ではありませんが、私のラップトップで試してみただけです。軽減効果があるかもしれませんが、物理的にはそれを大きくすることはできません。

これを制限する他の設定はありますか?自分で試してみてください。


1
私のバージョンのXPでこれを確認しました。なんという痛みでしょう
Julian Young

私はWindows XPでちょうど同じように笑いました。200文字の制限に達しました。次に、255回のファイルを作成してw削除し、Windows 7 x64で同じ名前のフォルダーを作成しました。ここでの問題は、ここでの制限要因は何ですか:NTFSバージョン、OSまたはサブシステム、またはXPのWin32 API?
0xC0000022L 2018年

200文字の制限はエクスプローラにあるようです。他のプログラムはより長いファイル名を作成できます。これはおそらく、ユーザーを自分から救うための意図的な制限です。:-)
avl_sweden

13

MSDNによれば、260文字です。"<NUL>"見えない終端のnull文字が含まれているため、実際の長さは259です。

しかし、記事を読んでください、それはもう少し複雑です。


1
実際、参照されているMSDNの記事によると、パスは260文字に制限されていますが、ファイル名の長さはファイルシステムに依存します(ただし、通常は255バイトです)。ただし、[Unicodeバージョンの[Windows API関数]]を使用してパスの制限を32767バイトに上げることは可能ですが、その制限は、Windowsが\\?\ 実行時に必要なプレフィックスを不特定の長さに内部的に拡張することで軽減されます。この拡張後、パスは32767バイト未満である必要があります。
ミッコランタライネン2018

13

NTFSの長さは255です。NTFS 属性のNameLengthフィールドは、$Filenameオフセットのないバイトです。これにより、範囲は0〜255になります。

ファイル名iselfは、異なる "名前空間"に置くことができます。これまでのところ:POSIX、WIN32、DOS、および(WIN32DOS-ファイル名をネイティブにDOS名にできる場合)。(文字列には長さがあるため、\ 0が含まれる可能性がありますが、これ問題を引き起こし、上記の名前空間にはありません。)

したがって、ファイルまたはディレクトリの名前は最大255文字です。Windowsでフルパスを指定する場合、パスの前に\\?\付ける(またはUNCパスの場合は\\?\ UNC \ server \ shareを使用する)ことにより、このパスを拡張パス(〜32k文字)としてマークする必要があります。。パスが長い場合は、途中で作業ディレクトリを設定する必要があります(うーん、プロセス全体の設定による副作用)。




4

これを上記の承認済み回答に追加します。

明確にするために、255〜260文字であると人々が信じるのは、それがWindowsエクスプローラーでサポートされているものだからです。それより長いファイル名のファイルコピーのようなことをするとエラーになります。ただし、プログラムははるかに長いファイル名の読み取りと書き込みを行うことができます(これは、エクスプローラーが最初に不満を言う長さになる方法です)。このような状況でのMicrosoftの「推奨修正」は、ファイルを書き込んだ元のプログラムでファイルを開き、名前を変更することです。


vimを使用して、コマンドラインから確実に260文字を超えるフォルダー階層の深いところにファイルを保存しようとしましたが、失敗しました。
パニー

@panny:そのため、Vimの作者は長いパス名を実装することに注意を払っていません。これはWindowsのせいでも、Win32サブシステムでも、OPが要求したNTFSのファイル名の長さの制限とは関係ありません。
0xC0000022L 2018年

3

新しいWindows SDKドキュメント(8.0)によると、新しいパス制限が提供されているようです。次のようなパス処理関数の新しいセットとPATHCCH_MAX_CCHの定義があります。

// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH             0x8000

3
ただし、Windows 8エクスプローラー(私の場合はWin8.1プレビュー)はこの制限で機能せず、259文字を超えるパスを受け入れません。
Cplusminus_is_coming 2013

3

公式ドキュメントのこの部分は、 NTFS、exFATおよびFAT32の場合は255 Unicode文字、UDFの場合は127 Unicodeまたは254 ASCII文字であることを明確に述べています。

それとは別に、パス名の最大長は常に32,760 Unicode文字で、各パスコンポーネントは255文字以下です。


十分近い。受け入れられた回答に関するコメントで指摘したように、それは32767 WCHAR要素です。いいえ、「Unicode文字」でありません(Unicodeの用語を確認してください:コードポイント、文字など...!)。
0xC0000022L 2018年


-2

238! Win7 32ビットで次のbatスクリプトを使用して確認しました。

set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF

Windows 7で長いパスを正しく処理するプログラムを使用して確認しました。個々のパスセグメントは最大255文字を使用できます(私はを使用しましたw)。ならどうしよう?
0xC0000022L 2018年

-2

実際には256です。 ファイルシステムの機能の比較、制限」を

投稿を繰り返すには http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.htmlで

「FAT32ではなくNTFSについて話していると仮定すると、「パス+ファイルの255文字」はファイルシステム自体ではなく、エクスプローラーの制限です。NTFSは、最大32,000 Unicode文字のパスをサポートし、各コンポーネントは最大255文字です。

エクスプローラ(およびWindows API)では、パスの文字数を260文字に制限しています。これには、ドライブ文字、コロン、区切りスラッシュ、および終端のnull文字が含まれます。Windowsで長いパスを読み取ることは可能です。\\"で。

上記の投稿を読むと、確信できる5番目のことがわかります。少なくとも1人の頑固なコンピューターユーザーを見つけます!


4
いいえ-255です。NTFS$ Filename属性のNameLengthフィールドは、オフセットのないバイトです。これにより、0〜255の範囲が得られます
ドミニクウェーバー、

-2

WS 2012 Explorerで224を超える名前+期間+拡張子を持つファイルを作成できません文字を。メッセンジャーを撃たないでください!

同じサーバーのCMDで、235文字を超える名前を作成することはできません。

指定されたパスが見つかりません。

エクスプローラで作成された224文字の名前のファイルはNotepad ++で開くことができません。代わりに新しいファイルが表示されます。


The system cannot find the path specified. と同じではありません The specified path, file name, or both are too long.。あなたはタイプミスか何かを持っていたと思います。存在しないパスにファイルを作成しようとしたり、存在しない方向に移動したりすると、このメッセージが表示されます。
Matthias Burger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.