NTFS中的最大文件名长度(Windows XP和Windows Vista)?

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

508636 次浏览

文件名的各个组成部分(即路径上的每个子目录和最终文件名)限制为255个字符,总路径长度限制为大约32,000个字符。

但是,在Windows上,不能超过MAX_PATH值(文件259个字符,文件夹248个字符)。详细信息请参见http://msdn.microsoft.com/en-us/library/aa365247.aspx

根据MSDN,它是260个字符。它包括"<NUL>" -不可见的终止空字符,因此实际长度为259。

但是阅读这篇文章,它有点复杂。

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

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

Windows XP NTFS的199,我刚查过。

这不是理论,而是我在笔记本电脑上尝试的结果。可能会有缓解作用,但它不会让我把它变大。

我想知道是否有其他的设定限制了这一点?你自己试试吧。

实际上是256,参见文件系统功能比较,限制

重复http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html上的帖子

"假设我们谈论的是NTFS而不是FAT32,“255个字符 for path+file”是资源管理器的限制,而不是文件系统本身。 NTFS支持最多32,000个Unicode字符长的路径 组件最多255个字符。

资源管理器和Windows API-限制您的260个字符 路径,包括驱动器号、冒号、分隔的斜杠和 终止空字符。可以读取更长的路径 Windows中,如果你以\\"

如果你读了上面的文章,你会发现你可以确定的第五件事: 至少找到一个顽固的电脑用户!< / p >

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

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

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

我把这个加到上面批准的答案中。

需要说明的是,人们之所以认为它是255-260个字符,是因为Windows资源管理器只支持这一个字符。如果文件名比这个长,它就会出错。然而,程序可以读取和写入更长的文件名(这就是Explorer最初抱怨的长度)。在这种情况下,微软的“推荐修复”是在编写该文件的原始程序中打开该文件并重命名它。

这是在框架4.5中,当试图保存一个长文件名的文件时,“Unhandled异常”所说的:

指定的路径、文件名或两者都太长。完全限定文件名必须小于260字符,目录名必须小于248字符。

截图

根据新的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

< >强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

我无法在WS 2012资源管理器中创建名称+句点+扩展名超过224字符的文件。别朝送信的开枪!

在同一服务器的CMD中,我不能创建一个长于235的字符名:

系统无法找到指定的路径。

在资源管理器中创建的具有224个字符名称的文件无法在notepad++中打开-它只是产生了一个新文件。

这是官方文件的一部分明确表示它是NTFS, exFAT和FAT32的255 Unicode字符,和UDF的127个Unicode或254个ASCII字符。

除此之外,最大路径名长度总是32,760个Unicode字符,每个路径组件不超过255个字符。

在Windows 11(在NTFS驱动器中)是带扩展名的236

为了测试,重命名一个文件与以下名称,并尝试增加一个字符:

1234567890123456789010123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.三种