Максимальная длина имени файла в NTFS (Windows XP и Windows Vista)?

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

15 ответов

Решение

Отдельные компоненты имени файла (т. Е. Каждый подкаталог вдоль пути и окончательное имя файла) ограничены 255 символами, а общая длина пути - примерно 32 000 символов. Тем не менее, как правило, вы должны попытаться ограничить длину пути до 260 символов (MAX_PATH) когда возможно. См. http://msdn.microsoft.com/en-us/library/aa365247.aspx для получения полной информации.

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

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

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

Скриншот

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

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

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

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

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

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

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

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

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

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

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

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

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

255 символов, хотя полный путь также не должен быть длиннее. В Википедии есть хорошая таблица на эту тему: http://en.wikipedia.org/wiki/Filename.

В Windows 11 (на диске NTFS) 236 с расширением

Для проверки переименуйте файл с именем ниже и попробуйте добавить еще один символ:

1234567890123456789010123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.txt

Я не могу создать файл с именем +period+extnesion в WS 2012 Explorer длиной более 224 символов. Не стреляйте в курьера!

В CMD того же сервера я не могу создать имя длиной более 235 символов:

Система не может найти указанный путь.

Файл с именем из 224 символов, созданный в Проводнике, нельзя открыть в Notepad++ - вместо этого он просто создает новый файл.

На самом деле это 256, см. Сравнение функциональных возможностей файловой системы, ограничения.

Повторить пост на http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html

"Предполагая, что мы говорим о NTFS, а не FAT32,"255 символов для пути + файл "является ограничением для обозревателя, а не для самой файловой системы. NTFS поддерживает пути длиной до 32 000 символов Юникода, причем каждый компонент может содержать до 255 символов.

Explorer - и Windows API- ограничивают вас 260 символами для пути, который включает в себя букву диска, двоеточие, разделяющую косую черту и завершающий нулевой символ. Можно прочитать более длинный путь в Windows, если вы начнете с \\ "

Если вы прочитаете вышеупомянутые посты, вы увидите, что есть 5-я вещь, в которой вы можете быть уверены: найти хотя бы одного упрямого пользователя компьютера!

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
Другие вопросы по тегам