Максимально возможная длина имени файла в ядре Windows - PullRequest
5 голосов
/ 07 января 2011

Мне было интересно, какова самая длинная возможная длина имени, разрешенная ядром Windows?

Например: я знаю, что ядро ​​использует UNICODE_STRING структуры для хранения всех путей к объектам, ипоскольку длина байта строки широких символов хранится внутри USHORT, это позволяет максимальную длину пути 2 ^ 15 - 1 символов.Существует ли подобное ограничение hard для имени файла (а не пути)?(Мне все равно, накладывает ли NTFS или FAT32 определенное ограничение; я ищу самое длинное теоретически допустимое имя в ядре, при условии отсутствия дополнительных ограничений файловой системы или оболочки.)

(Редактировать: Дляте, кто задаются вопросом, почему это вообще имеет значение, считают, что обычно обход каталога осуществляется с помощью вызовов FindFirstFile / FindNextFile, по одному вызову на файл. Учитывая функцию с именем NtQueryDirectoryFile, которая является базовым системным вызовом и возвращает множественные имен файлов за вызов, на самом деле можно воспользоваться этим ограничением максимальной длины пути, чтобы создать чрезвычайно быстрый обработчик каталогов, который использует только стек в качестве буфера. Теперь я пытаюсь расширить этои мне нужно знать максимальный размер имени файла.)

Ответы [ 2 ]

5 голосов
/ 07 января 2011

Максимальная длина пути составляет 32 767 символов, причем максимальная длина каждого компонента пути (каталога или файла) может составлять 255 символов (точнее, значение, возвращаемое параметром lpMaximumComponentLength функции GetVolumeInformation).

Это задокументировано на MSDN .

2 голосов
/ 25 августа 2011

Ах, я нашел эту страницу , что гарантирует , что имена файлов не могут быть длиннее 255 символов:

  • Длина ДОЛЖНА быть не более 32 760 символов.
    ...
  • Каждый компонент имени пути ДОЛЖЕН быть длиной не более 255 символов.

Что заставляет меня задуматься:

Почему Windows использует ULONG s для файла имя длины , когда использует USHORT s для путь длины ?!

Если кто-нибудь знает, почему это так, пожалуйста, оставляйте / комментируйте! Мне довольно любопытно :)

...