Я разрабатываю таблицу базы данных, в которой будут храниться имена загруженных файлов. Какова максимальная длина имени файла в NTFS в Windows XP или Vista?
Максимальная длина имени файла в NTFS (Windows XP и Windows Vista)?
Ответы (14)
Отдельные компоненты имени файла (т.е. каждый подкаталог по пути и окончательное имя файла) ограничены 255 символами, а общая длина пути ограничена приблизительно 32 000 символов.
Однако в Windows вы не можете превышать значение MAX_PATH (259 символов для файлов, 248 для папок). См. http://msdn.microsoft.com/en-us/library/aa365247.aspx для получения полной информации.
MAX_PATH ... Мы уже не в 1980-х!
- person 0xC0000022L; 19.10.2018
UNICODE_STRING именно так подсчитывает размер буфера. Но поскольку мы должны разделить это на sizeof(WCHAR), мы получаем 32767 (Length всегда четно в UNICODE_STRING). И даже это все еще приблизительное *, потому что внутренне имя подсистемы Win32, также известное как имя DOS, расширяется. Так что вместо C: у вас может быть \Device\HarddiskVolume11. Так что это расширение буквально уменьшает размер, который вы можете использовать из подсистемы Win32.
- person 0xC0000022L; 19.10.2018
MAX_PATH был простым способом ...
- person 0xC0000022L; 15.07.2020
Это 257 символов. Чтобы быть точным: сама NTFS требует максимальной длины файла в несколько тысяч символов (около 30 000 с чем-то). Однако Windows требует максимальной длины 260 для пути + имя файла. Папка диск + занимает не менее 3 символов, поэтому в итоге получается 257.
Вот что говорит «Необработанное исключение» в framework 4.5 при попытке сохранить файл с длинным именем:
Указанный путь, имя файла или оба слишком длинные. Полное имя файла должно быть меньше 260 символов, а имя каталога - меньше 248 символов.

199 на Windows XP NTFS, я только что проверил.
Это не теория, а просто примерка на моем ноутбуке. Могут быть смягчающие эффекты, но это физически не позволит мне увеличить их.
Интересно, есть ли какие-то другие настройки, ограничивающие это? Попробуйте сами.
w, удалил его и создал папку с тем же именем в Windows 7 x64. Теперь вопрос в том, что здесь является ограничивающим фактором: версия NTFS, ОС или подсистема или Win32 API в XP?
- person 0xC0000022L; 19.10.2018
Длина в 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.
Но прочтите статью, все немного сложнее.
\\?\ во время выполнения до некоторой неопределенной длины. После этого расширения путь не должен превышать 32767 байт.
- person Mikko Rantalainen; 28.02.2018
Я добавляю это к утвержденному выше ответу.
Чтобы быть ясным, люди считают, что это 255–260 символов, потому что это все, что поддерживает проводник Windows. Это приведет к ошибке, если вы сделаете что-то вроде копирования файла с более длинными именами файлов. Однако программа может читать и записывать гораздо более длинные имена файлов (именно так вы добираетесь до длины, на которую в первую очередь жалуется Explorer). В подобных ситуациях Microsoft рекомендует открыть файл в исходной программе, которая его написала, и переименовать.
Эта часть официальной документации ясно сказано, что это 255 символов Unicode для NTFS, exFAT и FAT32 и 127 символов Unicode или 254 ASCII для UDF.
Кроме того, максимальная длина имени пути всегда составляет 32 760 символов Unicode, причем длина каждого компонента пути не превышает 255 символов.
WCHAR элементов. Нет, это не символы Юникода (проверьте терминологию Юникода: кодовые точки, символы и т. Д.!).
- person 0xC0000022L; 19.10.2018
Согласно новой документации 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.
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). И что теперь?
- person 0xC0000022L; 19.10.2018
На самом деле это 256, см. Файловая система Сравнение функциональных возможностей, ограничения.
Чтобы повторить публикацию на http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html.
«Предполагая, что мы говорим о NTFS, а не о FAT32,« 255 символов для пути + файл »- это ограничение проводника, а не сама файловая система. NTFS поддерживает пути длиной до 32000 символов Unicode, с каждым компонентом до 255 символов.
Проводник и Windows API ограничивают путь до 260 символов, включая букву диска, двоеточие, разделительную косую черту и завершающий нулевой символ. В Windows можно прочитать более длинный путь, если вы начнете его с
\\"
Если вы прочтете вышеперечисленные сообщения, то увидите, что есть пятая вещь, в которой вы можете быть уверены: найти хотя бы одного упрямого пользователя компьютера!
Я не могу создать файл с именем + точка + расширение в 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.. Думаю, у вас была опечатка или что-то в этом роде. Вы получите это сообщение, если попытаетесь создать файл по пути, который не существует, или если вы хотите перейти в направлении, которого не существует.
- person Matthias Burger; 14.05.2019
MAX_PATHопределен в minwindef.h для тех, кто его ищет. Кроме того, здесь есть другие полезные макросы. - person Nicholas Miller   schedule 03.11.2015WCHARэлементов. А именноUNICODE_STRING- это проблема. - person 0xC0000022L   schedule 19.10.2018