我正在设计一个数据库表,用于保存上传文件的文件名。在 Windows XP 或 Vista 中使用的 NTFS 文件系统中,文件名的最大长度是多少?
我正在设计一个数据库表,用于保存上传文件的文件名。在 Windows XP 或 Vista 中使用的 NTFS 文件系统中,文件名的最大长度是多少?
文件名的各个组成部分(即路径中的每个子目录和最终文件名)限制为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个字符。
当尝试保存一个文件名很长的文件时,.NET Framework 4.5会显示"未处理的异常"错误信息:
指定的路径、文件名或两者都太长了。完全限定的文件名必须少于260个字符,目录名必须少于248个字符。
在NTFS中,文件名长度为255。NTFS的$Filename
属性中的NameLength
字段是一个没有偏移量的字节;这使得它的取值范围为0-255。
文件名本身可以位于不同的“命名空间”中。目前有:POSIX、WIN32、DOS和(WIN32DOS——当文件名原生为DOS名称时)。 (由于字符串具有长度,它可能包含\0,但这会引起问题,并且不在上述命名空间中。)
因此,文件或目录的名称最多可以有255个字符。在Windows下指定完整路径时,需要在路径前加上\\?\(或对于UNC路径,请使用\\?\UNC\server\share)来将此路径标记为扩展长度路径(约32k个字符)。如果您的路径太长,则必须沿途设置工作目录(哎呀——由于进程范围设置而产生的副作用)。
在Windows XP NTFS上,我刚刚检查了199。
这不是理论,而是从我的笔记本电脑尝试得出的结果。可能会有一些缓解效果,但它物理上不会让我把它变大。
我想是否有其他限制此功能的设置?请自行尝试。
根据MSDN,文件路径的最大长度为260个字符。这个长度包括了不可见的终止空字符"<NUL>"
,所以实际长度是259个字符。
但文章指出,情况还要更加复杂。
\\?\
前缀而被减少到某个未指定的长度。此扩展后的路径长度必须在32767字节以下。 - Mikko Rantalainen我在以上批准的答案中添加了这个。
需要明确的是,人们认为255-260个字符是因为Windows Explorer只支持这么长的文件名。如果文件名超过这个长度,它会在执行文件复制等操作时出错。然而,程序可以读写更长的文件名(这也是你首先看到Explorer抱怨文件名太长的原因)。微软在这种情况下的“推荐解决方案”是打开编写该文件的原始程序并将其重命名。
官方文档清楚地说明了,对于NTFS、exFAT和FAT32文件系统,文件名最多使用255个Unicode字符,而对于UDF文件系统,则为127个Unicode字符或254个ASCII字符。
除此之外,最大路径名长度始终为32,760个Unicode字符,每个路径组件不超过255个字符。
WCHAR
元素。不,这不是“Unicode字符”(检查你的Unicode术语:代码点、字符等等……!)。 - 0xC0000022L// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000