我正在设计一个数据库表,它将保存上传文件的文件名。windowsxp或Vista使用的NTFS中文件名的最大长度是多少?


当前回答

255个字符,但是完整的路径也不应该超过这个长度。维基百科上有一个很好的表格:http://en.wikipedia.org/wiki/Filename。

其他回答

255个字符。

http://en.wikipedia.org/wiki/Filename

它有257个字符。 准确地说: NTFS本身的最大文件名长度为几千个字符(大约30,000个左右)。 但是,Windows对路径+文件名规定了260的最大长度。驱动器+文件夹至少占用3个字符,因此最终有257个字符。

NTFS中的长度为255。NTFS $Filename属性中的NameLength字段是一个没有偏移量的字节;这将产生0-255的范围。

文件名本身可以在不同的“命名空间”中。到目前为止,有:POSIX, WIN32, DOS和(WIN32DOS -当文件名可以是DOS名称时)。(由于字符串有长度,它可以包含\0,但这会产生问题,并且不在上面的名称空间中。)

因此,一个文件或目录的名称最多可以是255个字符。在Windows下指定完整路径时,需要在路径前加上\\?\(或者使用\\?\UNC\server\share for UNC路径)将此路径标记为扩展长度路径(~32k字符)。如果您的路径较长,您将不得不沿途设置您的工作目录(由于进程范围设置的副作用)。

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 SDK文档(8.0),似乎提供了一个新的路径限制。有一组新的路径处理函数和PATHCCH_MAX_CCH的定义,如下所示:

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