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


260

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


83
对于一个简单的问题,我从未见过这么多不同的答案。199、255、256、257、260,“大约3万”,“大约32000”和“取决于”。当然,有资格赛,但是这些不可能全部正确吗?
无条件

7
它的255,我知道这一点,因为我必须构建一个应用程序来防止企业用户访问此文件,因为这会导致我们的存储服务器出现问题。
罗伯特

2
@罗伯特·皮特 您在那里缺少任何东西。从MSDN引用:“路径的最大长度是MAX_PATH,它定义为260个字符”
Michael Olesen

7
@ Michael9000。我相信RobertPitt引用的是文件名限制(这是有关此问题的内容),而不是路径限制。
gdw2 2011年

7
NTFS完全不限于MAX_PATH,Windows Shell限于MAX_PATH,NTFS最大路径长度为32k
paulm 2013年

Answers:


286

文件名的各个部分(即路径中的每个子目录以及最终文件名)均限制为255个字符,总路径长度限制为约32,000个字符。

但是,在Windows上,您不能超过MAX_PATH值(文件259个字符,文件夹248个字符)。看到有关完整的详细信息,请参见http://msdn.microsoft.com/zh-cn/library/aa365247.aspx


4
这是证实该答案的其他一些事实(Windows通常限制为260个字符): msdn.microsoft.com/zh-cn/library/…blogs.msdn.com/b/bclteam/archive/2007/02/13 /…
Michael Olesen

62
根据提供的链接,对NTFS正确,对Windows不正确:“在Windows API(以下段落中讨论的某些例外情况)中,路径的最大长度为MAX_PATH,它定义为260个字符”。的路径,对于所有的实际目的,不限于259个字符(允许空终止)。
劳伦斯·多尔

9
显然,如果您使用Windows API文件方法的“ unicode版本”,那么如果在路径名前加上“ \\?\”是正确的,那么最多可以获得32767。
rogerdpack 2012年

6
@rogerdpack:对于完整路径,是的,但是每个单独的组件(子文件夹/最终文件)的限制为255个utf-16代码点。另外,普通软件希望使用MAX_PATH,因此...... 繁荣 :)
12

5
在Windows 10(版本1607-周年更新)和Windows Server 2016中,您可以通过忽略组策略条目来忽略MAX_PATH问题,方法是在计算机配置->管理模板->系统->文件系统下启用NTFS长路径:
史蒂芬·马克·福特(Steven Mark Ford)

28

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


21
错误-NUL终止符是MAX_PATH的一部分,它为您提供了256个字符的最大路径(由于单个组件限制为255,因此无法创建)。
2012年

4
“由于单个组件限制为255而无法创建”。错误。我们在这里谈论的是最大路径长度,而不是单个路径组件的最大长度。此外,“使用API​​创建目录时,指定的路径不能太长,以至于您无法追加8.3文件名(即,目录名不能超过MAX_PATH减12)。”
Ludovic Kuty 2014年

之所以引起争议,是因为低级api允许创建256个字符的文件名(假定256个字符为空,但是该文件对于本机应用程序是不可访问的(隐藏的),因此通常没有用)。
康拉德B

1
@LudovicKuty:实际上,OP在谈论文件名长度限制,而不是路径长度(是的,即使在原始版本中,我也检查过)。他/她非常具体地指的是NTFS限制,而不是操作系统,特定子系统或API或框架的限制。
0xC0000022L

@ 0xC0000022L确实是。我在OP问题中误读了它,而将注意力集中在谈论文件名长度和路径长度的注释上。
Ludovic Kuty

27

这是试图保存长文件名的文件时在框架4.5上所说的“未处理的异常”:

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

屏幕截图


16

我刚刚检查了Windows XP NTFS上的199。

这不是理论,而是尝试在笔记本电脑上尝试的结果。可能会有缓解的效果,但是从物理上讲,它不允许我将其放大。

我想知道还有其他设置可以限制这一点吗?自己尝试一下。


1
在我的XP版本中确认了这一点,真是
朱利安·扬

我在Windows XP上做了完全相同的操作,只是傻笑。我达到了200个字符的限制。然后,我刚创建了一个255次文件w,将其删除并在Windows 7 x64上创建了一个具有相同名称的文件夹。现在的问题是,这里的限制因素是什么:NTFS版本,操作系统或子系统或XP中的Win32 API?
0xC0000022L

200个字符的限制似乎在资源管理器中。其他程序可以创建更长的文件名。这可能是一个故意的限制,目的是将用户从他/她自己身上救出来。:-)
avl_sweden

13

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

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


1
实际上,引用的MSDN文章说,路径限制为260个字符,但文件名的长度取决于文件系统(但通常为255个字节)。但是,可以使用“ [Windows API函数的Unicode版本]”将路径限制提高到32767字节,但是通过Windows \\?\ 在运行时在内部将所需的前缀扩展到一些未指定的长度,可以减少该限制。扩展后,路径必须保持在32767字节以下。
Mikko Rantalainen

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 Explorer支持的全部功能。这样做会出错,例如对文件名进行更长的文件复制。但是,程序可以读写更长的文件名(这是资源管理器首先抱怨的长度)。在这种情况下,Microsoft的“建议修复”是在编写该文件的原始程序中打开该文件并重命名。


我试图用vim从命令行在文件夹层次结构中保存文件,绝对超过260个字符,但未成功。
panny

@panny:所以Vim的作者当时并没有注意实现长路径名。这不是Windows的责任,也不是Win32子系统,也与OP询问的NTFS的文件名长度限制没有关系。
0xC0000022L

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 Preview)无法使用此限制,并且它不能接受长度超过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


-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

-2

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

要在http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html上重复发布

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

资源管理器(以及Windows API)将路径的字符数限制为260个,其中包括驱动器号,冒号,斜杠和终止的空字符。如果您在Windows中以\\

如果您阅读以上文章,您会发现有5件事可以肯定:找到至少一个固执的计算机用户!


4
不,它是255。NTFS $ Filename属性中的NameLength字段是一个没有偏移量的字节。这会产生0-255的范围
Dominik Weber 2010年

-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.