Windows内核中可能的最大文件名长度

时间:2011-01-07 09:23:19

标签: winapi path kernel filenames name-length

我想知道,Windows内核允许的最长可能的名称长度是多少?

例如:我知道内核使用UNICODE_STRING结构来保存所有对象路径,并且由于宽字符串的字节长度存储在USHORT内,因此允许最大路径长度2 ^ 15 - 1个字符。是否对文件名(而不是路径)有类似的限制? (我不在乎NTFS或FAT32是否有特殊限制;我在内核中寻找理论上允许的最长名称,假设没有额外的文件系统或shell限制。)

(编辑:对于那些想知道为什么这甚至很重要的人,请考虑通常情况下,通过FindFirstFile / FindNextFile调用遍历目录,每个文件调用一次。给定名为{{1}的函数},这是底层系统调用,并且每次调用返回多个文件名,它实际上可以利用路径上的这个最大长度限制来创建一个非常快的目录仅使用堆栈作为缓冲区的遍历器。现在我试图扩展该概念,并且我需要知道文件名的最大大小。)

2 个答案:

答案 0 :(得分:5)

路径的最大长度为32,767个字符,每个路径组件(目录或文件)的最大长度可以为255个字符(更准确地说,是GetVolumeInformation函数的lpMaximumComponentLength参数中返回的值)。 p>

这是documented on MSDN

答案 1 :(得分:2)

啊,我自己发现this page 保证文件名不能超过255个字符:

  
      
  • 路径名长度不得超过32,760个字符   ...
  •   
  • 每个路径名组件的长度不得超过255个字符。
  •   

这让我想知道:

为什么Windows use ULONGs for file name lengthsuses USHORTs for path lengths?!

如果有人知道这是为什么,请发表/评论!我很好奇。 :)