Максимальная длина имени файла в NTFS (Windows XP и Windows Vista)? - PullRequest
238 голосов
/ 05 ноября 2008

Я создаю таблицу базы данных, в которой будут храниться имена загруженных файлов. Какова максимальная длина имени файла в NTFS, используемого Windows XP или Vista?

Ответы [ 14 ]

263 голосов
/ 05 ноября 2008

Отдельные компоненты имени файла (то есть каждый подкаталог вдоль пути и окончательное имя файла) ограничены 255 символами, а общая длина пути ограничена примерно 32 000 символов.

Однако в Windows нельзя превышать значение MAX_PATH (259 символов для файлов, 248 для папок). См. http://msdn.microsoft.com/en-us/library/aa365247.aspx для получения полной информации.

25 голосов
/ 05 ноября 2008

Это 257 символов. Точнее: Сама NTFS устанавливает максимальную длину имени файла в несколько тысяч символов (около 30 000 с чем-то). Тем не менее, Windows устанавливает максимальную длину 260 для пути + имя файла. Папка drive + занимает не менее 3 символов, поэтому вы получите 257.

24 голосов
/ 12 апреля 2013

Это то, что «Необработанное исключение» говорит в Framework 4.5 при попытке сохранить файл с длинным именем файла:

Указанный путь, имя файла или оба они слишком длинные. Полное имя файла должно содержать не более 260 символов, а имя каталога должно содержать не более 248 символов.

screenshot

15 голосов
/ 05 ноября 2008

199 в Windows XP NTFS, я только что проверил.

Это не теория, а просто примерка моего ноутбука. Могут быть смягчающие эффекты, но физически это не позволит мне увеличить его.

Интересно, есть ли другие ограничения, ограничивающие это? Попробуйте сами.

13 голосов
/ 05 ноября 2008

Согласно MSDN , это 260 символов. Он включает "<NUL>" - невидимый завершающий нулевой символ, поэтому фактическая длина равна 259.

Но прочитайте статью, она немного сложнее.

12 голосов
/ 24 августа 2010

Длина в NTFS равна 255. Поле NameLength в атрибуте NTFS $Filename является байтом без смещения; это дает диапазон 0-255.

Имя файла iself может находиться в разных «пространствах имен». Пока есть: POSIX, WIN32, DOS и (WIN32DOS - когда имя файла может быть изначально именем DOS). (Поскольку строка имеет длину, она может содержать \ 0, но это приведет к проблемам и не будет в указанных выше пространствах имен.)

Таким образом, имя файла или каталога может содержать до 255 символов. При указании полного пути в Windows вам необходимо поставить префикс пути с \\? \ (или использовать \\? \ UNC \ server \ share для путей UNC) , чтобы отметить путь как расширенный (~ 32k символов). Если ваш путь длиннее, вам придется установить свой рабочий каталог по пути (тьфу - побочные эффекты из-за настройки всего процесса).

7 голосов
/ 05 ноября 2008
4 голосов
/ 09 октября 2012

Я добавляю это к утвержденному выше ответу.

ЧТОБЫ БЫТЬ ЧИСТО, люди считают, что это 255-260 символов, потому что это все, что поддерживает Windows Explorer. Он будет ошибочно делать что-то вроде копии файла с именами файлов длиннее этого. Тем не менее, программа может читать и записывать гораздо более длинные имена файлов (именно так вы получаете длины, на которые в первую очередь жалуется Explorer). «Рекомендуемое исправление» от Microsoft в подобных ситуациях - открыть файл в исходной программе, в которой он был написан, и переименовать его.

3 голосов
/ 09 августа 2018

В этой части официальной документации четко сказано, что это 255 символов Unicode для NTFS, exFAT и FAT32 и 127 символов Unicode или 254 ASCII для UDF.

Кроме того, максимальная длина имени пути всегда составляет 32 760 символов Юникода, причем каждый компонент пути не должен превышать 255 символов.

3 голосов
/ 11 сентября 2013

В соответствии с новой документацией 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
...