アップロードしたファイルのファイル名を保持するデータベーステーブルを設計しています。Windows XPまたはVistaで使用されるNTFSのファイル名の最大長はいくつですか?
アップロードしたファイルのファイル名を保持するデータベーステーブルを設計しています。Windows XPまたはVistaで使用されるNTFSのファイル名の最大長はいくつですか?
回答:
ファイル名の個々のコンポーネント(つまり、パスに沿った各サブディレクトリと最終的なファイル名)は255文字に制限されており、パスの全長は約32,000文字に制限されています。
ただし、Windowsでは、MAX_PATH
値(ファイルの場合は259文字、フォルダーの場合は248文字)を超えることはできません。見る詳細については、http://msdn.microsoft.com/en-us/library/aa365247.aspxを参照してください。
257文字です。正確に言うと、NTFS自体は、数千文字の最大ファイル名長(約30'000程度)を課します。ただし、Windowsでは、パスとファイル名の最大長は260です。ドライブ+フォルダーは3文字以上を占めるため、257になります。
これは、長いファイル名でファイルを保存しようとしたときに、フレームワーク4.5で「未処理の例外」と言われるものです。
指定されたパス、ファイル名、またはその両方が長すぎます。完全修飾ファイル名は260文字未満である必要があり、ディレクトリ名は248文字未満である必要があります。
Windows XP NTFSで199、チェックしたところです。
これは理論ではありませんが、私のラップトップで試してみただけです。軽減効果があるかもしれませんが、物理的にはそれを大きくすることはできません。
これを制限する他の設定はありますか?自分で試してみてください。
w
削除し、Windows 7 x64で同じ名前のフォルダーを作成しました。ここでの問題は、ここでの制限要因は何ですか:NTFSバージョン、OSまたはサブシステム、またはXPのWin32 API?
MSDNによれば、260文字です。"<NUL>"
見えない終端のnull文字が含まれているため、実際の長さは259です。
しかし、記事を読んでください、それはもう少し複雑です。
\\?\
実行時に必要なプレフィックスを不特定の長さに内部的に拡張することで軽減されます。この拡張後、パスは32767バイト未満である必要があります。
NTFSの長さは255です。NTFS 属性のNameLength
フィールドは、$Filename
オフセットのないバイトです。これにより、範囲は0〜255になります。
ファイル名iselfは、異なる "名前空間"に置くことができます。これまでのところ:POSIX、WIN32、DOS、および(WIN32DOS-ファイル名をネイティブにDOS名にできる場合)。(文字列には長さがあるため、\ 0が含まれる可能性がありますが、これは問題を引き起こし、上記の名前空間にはありません。)
したがって、ファイルまたはディレクトリの名前は最大255文字です。Windowsでフルパスを指定する場合、パスの前に\\?\を付ける(またはUNCパスの場合は\\?\ UNC \ server \ shareを使用する)ことにより、このパスを拡張パス(〜32k文字)としてマークする必要があります。。パスが長い場合は、途中で作業ディレクトリを設定する必要があります(うーん、プロセス全体の設定による副作用)。
これを上記の承認済み回答に追加します。
明確にするために、255〜260文字であると人々が信じるのは、それがWindowsエクスプローラーでサポートされているものだからです。それより長いファイル名のファイルコピーのようなことをするとエラーになります。ただし、プログラムははるかに長いファイル名の読み取りと書き込みを行うことができます(これは、エクスプローラーが最初に不満を言う長さになる方法です)。このような状況でのMicrosoftの「推奨修正」は、ファイルを書き込んだ元のプログラムでファイルを開き、名前を変更することです。
新しい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
公式ドキュメントのこの部分は、 NTFS、exFATおよびFAT32の場合は255 Unicode文字、UDFの場合は127 Unicodeまたは254 ASCII文字であることを明確に述べています。
それとは別に、パス名の最大長は常に32,760 Unicode文字で、各パスコンポーネントは255文字以下です。
WCHAR
要素です。いいえ、「Unicode文字」ではありません(Unicodeの用語を確認してください:コードポイント、文字など...!)。
255文字ですが、完全なパスもそれより長くすることはできません。これについてはウィキペディアに素敵な表があります:http : //en.wikipedia.org/wiki/Filename。
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
w
)。ならどうしよう?
実際には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人の頑固なコンピューターユーザーを見つけます!
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.
。あなたはタイプミスか何かを持っていたと思います。存在しないパスにファイルを作成しようとしたり、存在しない方向に移動したりすると、このメッセージが表示されます。