Каков самый длинный путь к файлу, который может обработать Windows?

57

Каков самый длинный путь к файлу, который может обработать Windows?

Рон Туффин
источник

Ответы:

48

Максимальная длина пути (от MSDN)

В Windows API (с некоторыми исключениями, обсуждаемыми в следующих параграфах), максимальная длина пути равна MAX_PATH, которая определяется как 260 символов . Локальный путь структурирован в следующем порядке: буква диска, двоеточие, обратная косая черта, компоненты, разделенные обратной косой чертой, и завершающий нулевой символ. Например, максимальный путь на диске D равен «D: \ <строка пути длиной около 256 символов> <NUL>», где «<NUL>» представляет невидимый завершающий нулевой символ для текущей системной кодовой страницы. (Символы <> используются здесь для наглядности и не могут быть частью допустимой строки пути.)

Адам Матан
источник
4
Вы должны упомянуть, что вы можете обрабатывать пути, которые превышают этот предел, добавляя к нему префикс `\\?` (Я думаю, что это была та последовательность символов).
Джои
3
Вы также должны указать ограничение для путей Unicode, упомянутых во втором абзаце: ~ 32k
akira
260? 256 символов, игнорируя диск: \ и терминатор. Это 2009 год, почему мы получаем только один байт персонажей для игры?
Фоши
@Phoshi API для использования более длинных путей по умолчанию не используются ОС, поскольку передача произвольно длинных строк в приложения, которые были плохо написаны разработчиками, которые знали, что путь никогда не может быть длиннее 260 символов, и решили выделить фиксированную длину Массив для его хранения приведет к огромному количеству переполнений буфера, что приведет к сбою и / или эксплуатации приложений. Немного лучшие реализации разработчиками с таким же неправильным знанием могли бы прерваться, потому что их проверка пути выявила слишком длинную ошибку.
Дэн Нили
15

Путь к файлу XP - 250 символов

Путь к файлу Vista - 260 символов

Самый длинный путь при чистой установке Windows XP составляет 152 символа.

Самый длинный путь в полуочищенной установке Windows Vista составляет 195 символов:

Windows XP допускает имена файлов длиной до 255 символов

Windows Vista допускает даже более длинные имена файлов, содержащие до 260 символов.

http://www.codinghorror.com/blog/archives/000729.html

Джо
источник
5
это просто верно, если вы не используете unicode-api, который немного расширяет лимит (~ 32k, см. msdn.microsoft.com/en-us/library/… )
akira
1
хммм. в таком случае ограничение в Win7 должно быть около 265 символов, не так ли?
Квик-кихот
Зачем им увеличивать лимит на десять символов? Кажется, оно того не стоит, не так ли? \
Фоши
это неверно Максимальная длина имени файла по-прежнему составляет 255 символов в любой Windows, поскольку это ограничение NTFS
phuclv
8

Константа Windows MAX_PATHравна 260, как говорят другие ответы, однако самый длинный путь - 32767.

Смотрите здесь .

32k - это использование UNICODE, но теперь мы должны его использовать, поэтому мы должны также использовать такую ​​максимальную длину пути.

Кроме того, вы можете посмотреть на мой ответ в SO, который объясняет некоторые вещи более подробно о максимальной длине пути.

ST3
источник
1

«Классический» предел 260 символов: drive letter+ :\+ 255 characters of filename+ \(или для округления) + , null terminatorкак сказано в других ответах

Однако реальный внутренний предел 32767 символов , которые могут быть достигнуты путем добавления , \\?\чтобы получить полный путь

Windows API имеет много функций, которые также имеют версии Unicode, чтобы разрешить путь расширенной длины для максимальной общей длины пути 32 767 символов. Этот тип пути состоит из компонентов, разделенных обратной косой чертой, каждая из которых соответствует значению, возвращенному в lpMaximumComponentLengthпараметре GetVolumeInformationфункции (обычно это значение составляет 255 символов). Чтобы указать путь расширенной длины, используйте "\\?\"префикс. Например, "\\?\D:\very long path".

Если по каким-либо причинам полные пути не могут быть использованы, то к более глубоким каталогам можно обратиться, подключив их к букве диска с помощью subst/ diskpartили создав соединение / символическую ссылку для сокращения пути

Начиная с Windows 10, MAX_PATHограничение также было удалено, хотя не по умолчанию

Начиная с Windows 10, версия 1607, MAX_PATHограничения были удалены из общих функций файлов и каталогов Win32. Тем не менее, вы должны подписаться на новое поведение.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

phuclv
источник