アップロードされたファイルのファイル名を保持するデータベース テーブルを設計しています。Windows XP または Vista で使用される NTFS のファイル名の最大長は?
14 に答える
ファイル名の個々のコンポーネント (つまり、パスに沿った各サブディレクトリと最終的なファイル名) は 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文字未満である必要があります。
NTFS の長さは 255 です。NTFS 属性のNameLength
フィールドは、$Filename
オフセットのないバイトです。これにより、0 ~ 255 の範囲が得られます。
ファイル名自体は、異なる「名前空間」にある場合があります。これまでのところ、POSIX、WIN32、DOS、および (WIN32DOS - ファイル名がネイティブに DOS 名である場合) があります。(文字列には長さがあるため、\0 を含めることができますが、これは問題を引き起こし、上記の名前空間にはありません。)
したがって、ファイルまたはディレクトリの名前は最大 255 文字です。Windows でフル パスを指定する場合は、パスの前に\\?\を付けて(または UNC パスの場合は \\?\UNC\server\share を使用して)、このパスを拡張長 (~32k 文字) としてマークする必要があります。 . パスが長い場合は、途中で作業ディレクトリを設定する必要があります (うーん、プロセス全体の設定による副作用)。
Windows XP NTFS で 199 を確認しました。
これは理論ではなく、ラップトップで試しただけです。緩和効果はあるかもしれませんが、物理的に大きくすることはできません。
これを制限する他の設定はありますか?自分で試してみてください。
MSDNによると、260 文字です。"<NUL>"
目に見えない終了ヌル文字が含まれているため、実際の長さは 259 です。
しかし、記事を読んでください。もう少し複雑です。
これを上記の承認済みの回答に追加します。
明確にするために、人々が 255 ~ 260 文字であると信じている理由は、それが Windows エクスプローラーでサポートされているすべてだからです。それよりも長いファイル名でファイルのコピーなどを行うと、エラーが発生します。ただし、プログラムははるかに長いファイル名を読み書きできます (これは、エクスプローラーが最初に不満を言う長さに到達する方法です)。このような状況でのマイクロソフトの「推奨される修正」は、ファイルを書き込んだ元のプログラムでファイルを開き、名前を変更することです。
新しい 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
255 文字ですが、完全なパスもそれより長くすべきではありません。ウィキペディアには、これに関する素晴らしい表があります: http://en.wikipedia.org/wiki/Filename。
実際には 256です。 File System Functionality Comparison, Limitsを参照してください。
http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.htmlで投稿を繰り返すには
「FAT32ではなくNTFSについて話していると仮定すると、「パス+ファイルの255文字」はエクスプローラーの制限であり、ファイルシステム自体ではありません。NTFSは最大32,000文字のUnicode文字までのパスをサポートし、各コンポーネントは最大255文字です。
エクスプローラーと Windows API では、パスが 260 文字に制限されています。これには、ドライブ文字、コロン、区切りのスラッシュ、および終端のヌル文字が含まれます。
\\
"で開始すると、Windows でより長いパスを読み取ることができます。
上記の投稿を読めば、確信できる 5 番目のことがわかるはずです。少なくとも 1 人の頑固なコンピューター ユーザーを見つけることです!
238! 次のbatスクリプトを使用して、Win7 32ビットで確認しました。
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