Я проектирую таблицу базы данных, которая будет содержать имена загруженных файлов. Какова максимальная длина имени файла в NTFS, используемого Windows XP или Vista?
Я проектирую таблицу базы данных, которая будет содержать имена загруженных файлов. Какова максимальная длина имени файла в NTFS, используемого Windows XP или Vista?
Ответы:
Отдельные компоненты имени файла (т. Е. Каждый подкаталог вдоль пути и окончательное имя файла) ограничены 255 символами, а общая длина пути - примерно 32 000 символов.
Однако в Windows нельзя превышать MAX_PATH
значение (259 символов для файлов, 248 для папок). Видеть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, я только что проверил.
Это не теория, а просто примерка моего ноутбука. Могут быть смягчающие эффекты, но это физически не позволит мне увеличить его.
Интересно, есть ли другие ограничения, ограничивающие это? Попробуйте сами.
w
, удалил его и создал папку с таким же именем в Windows 7 x64. Теперь вопрос в том, что является здесь ограничивающим фактором: версия NTFS, ОС или подсистема или Win32 API в XP?
По данным MSDN , это 260 символов. Он включает в себя "<NUL>"
- невидимый завершающий нулевой символ, поэтому фактическая длина составляет 259.
Но прочитайте статью, это немного сложнее.
\\?\
префикс во время выполнения до некоторой неопределенной длины. Путь должен оставаться ниже 32767 байт после этого расширения.
Длина в NTFS составляет 255. NameLength
Поле в $Filename
атрибуте NTFS является байтом без смещения; это дает диапазон 0-255.
Имя файла iself может находиться в разных «пространствах имен». Пока есть: POSIX, WIN32, DOS и (WIN32DOS - когда имя файла может быть изначально именем DOS). (Поскольку строка имеет длину, она может содержать \ 0, но это может привести к проблемам и не находится в указанных выше пространствах имен.)
Таким образом, имя файла или каталога может содержать до 255 символов. При указании полного пути в Windows необходимо указать префикс пути \\? \ (Или использовать \\? \ UNC \ server \ share для путей UNC), чтобы пометить этот путь как расширенный (~ 32 тыс. Символов) , Если ваш путь длиннее, вам придется установить свой рабочий каталог по пути (тьфу - побочные эффекты из-за настройки всего процесса).
255 символов.
Я добавляю это к утвержденному выше ответу.
ЧТОБЫ ПРОЧИТАТЬ, причина, по которой люди считают, что это 255-260 символов, в том, что это все, что поддерживает Windows Explorer. Он будет ошибочно делать что-то вроде копии файла с именами файлов длиннее. Тем не менее, программа может читать и записывать гораздо более длинные имена файлов (именно так вы получаете длины, на которые в первую очередь жалуется Explorer). «Рекомендуемое исправление» Microsoft в подобных ситуациях - открыть файл в исходной программе, в которой он был написан, и переименовать его.
В соответствии с новой документацией 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 символов Unicode для NTFS, exFAT и FAT32 и 127 символов Unicode или 254 ASCII для UDF.
Кроме того, максимальная длина имени пути всегда составляет 32 760 символов Юникода, причем каждый компонент пути не должен превышать 255 символов.
WCHAR
элементов. Нет, это не «символы Unicode» (проверьте терминологию Unicode: кодовые точки, символы и т. Д.!!).
255 символов, хотя полный путь также не должен быть длиннее. В Википедии есть хорошая таблица на эту тему : http://en.wikipedia.org/wiki/Filename .
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
w
). И что теперь?
На самом деле это 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-я вещь, в которой вы можете быть уверены: найти хотя бы одного упрямого пользователя компьютера!
Я не могу создать файл с именем + period + extnesion в WS 2012 Explorer длиной более 224 символов. Не стреляйте в курьера!
В CMD того же сервера я не могу создать имя длиной более 235 символов:
Система не может найти указанный путь.
Файл с именем из 224 символов, созданный в Проводнике, нельзя открыть в Notepad ++ - вместо этого он просто создает новый файл.
The system cannot find the path specified.
это не то же самое, что The specified path, file name, or both are too long.
. Я думаю, у вас была опечатка или что-то. Это сообщение появляется, если вы пытаетесь создать файл по несуществующему пути или если вы хотите перейти в несуществующее направление.