我正在设计一个数据库表,它将保存上载文件的文件名。Windows XP或Vista使用的NTFS中文件名的最大长度是多少?
我正在设计一个数据库表,它将保存上载文件的文件名。Windows XP或Vista使用的NTFS中文件名的最大长度是多少?
Answers:
文件名的各个部分(即路径中的每个子目录以及最终文件名)均限制为255个字符,总路径长度限制为约32,000个字符。
但是,在Windows上,您不能超过MAX_PATH
值(文件259个字符,文件夹248个字符)。看到有关完整的详细信息,请参见http://msdn.microsoft.com/zh-cn/library/aa365247.aspx。
这是257个字符。准确地说:NTFS本身确实规定了数千个字符(大约30'000左右)的最大文件名长度。但是,Windows对路径+文件名强加了260个最大长度。驱动器+文件夹至少占用3个字符,因此最终得到257。
这是试图保存长文件名的文件时在框架4.5上所说的“未处理的异常”:
指定的路径,文件名或两者都太长。完全限定的文件名必须少于260个字符,目录名称必须少于248个字符。
我刚刚检查了Windows XP NTFS上的199。
这不是理论,而是尝试在笔记本电脑上尝试的结果。可能会有缓解的效果,但是从物理上讲,它不允许我将其放大。
我想知道还有其他设置可以限制这一点吗?自己尝试一下。
w
,将其删除并在Windows 7 x64上创建了一个具有相同名称的文件夹。现在的问题是,这里的限制因素是什么:NTFS版本,操作系统或子系统或XP中的Win32 API?
根据MSDN,这是260个字符。它包含"<NUL>"
-不可见的终止空字符,因此实际长度为259。
但是阅读这篇文章,它有点复杂。
\\?\
在运行时在内部将所需的前缀扩展到一些未指定的长度,可以减少该限制。扩展后,路径必须保持在32767字节以下。
NTFS中的长度为255。NTFS 属性中的NameLength
字段$Filename
是一个无偏移的字节。这将产生0-255的范围。
文件名iself可以在不同的“命名空间”中。到目前为止,有:POSIX,WIN32,DOS和(WIN32DOS-当文件名可以是本机DOS名称时)。(由于字符串具有长度,它可以包含\ 0,但这会产生问题,并且不在上面的名称空间中。)
因此,文件或目录的名称最多可以包含255个字符。在Windows下指定完整路径时,您需要在路径前加上\\?\(或对于UNC路径使用\\?\ UNC \ server \ share)以将该路径标记为扩展长度(〜32k个字符) 。如果路径较长,则必须一路设置工作目录(嗯-由于整个过程的设置都有副作用)。
255个字符。
我将其添加到上面批准的答案中。
明确地说,人们认为它是255-260个字符的原因是Windows Explorer支持的全部功能。这样做会出错,例如对文件名进行更长的文件复制。但是,程序可以读写更长的文件名(这是资源管理器首先抱怨的长度)。在这种情况下,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个字符,但完整路径也不应超过该长度。Wikipedia上有一个很好的表格: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上重复发布
“假定我们在谈论的是NTFS,而不是FAT32,“路径+文件的255个字符”是资源管理器的限制,而不是文件系统本身。NTFS支持最长32,000个Unicode字符的路径,每个组件最多255个字符。
资源管理器(以及Windows API)将路径的字符数限制为260个,其中包括驱动器号,冒号,斜杠和终止的空字符。如果您在Windows中以
\\
“
如果您阅读以上文章,您会发现有5件事可以肯定:找到至少一个固执的计算机用户!
我无法在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.
。我猜你有错字。如果您尝试在不存在的路径中创建文件,或者想要移至不存在的方向,则会收到该消息。