Максимальная длина имени файла в 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