Вопрос или проблема
Какова максимальная длина пути к файлу, с которой может работать Windows?
Максимальная длина пути (из MSDN)
В Windows API (с некоторыми исключениями, обсуждаемыми в следующих параграфах) максимальная длина пути составляет MAX_PATH, который определён как 260 символов. Локальный путь имеет следующую структуру: буква диска, двоеточие, обратный слеш, компоненты, разделённые обратными слешами, и завершающий нулевой символ. Например, максимальный путь на диске D – “D:\<некоторый путь длиной 256 символов><NUL>”, где “<NUL>” представляет собой невидимый завершающий нулевой символ для текущей кодовой страницы системы. (Символы < > используются здесь для визуальной ясности и не могут быть частью допустимой строки пути.)
Длина пути к файлу в XP – 250 символов
Длина пути к файлу в Vista – 260 символов
Максимальная длина пути на чистой установке Windows XP составляет 152 символа.
Максимальная длина пути на полу-чистой установке Windows Vista составляет 195 символов.
Windows XP позволяет именам файлов длиной до 255 символов
Windows Vista позволяет даже более длинные имена файлов, содержащие до 260 символов.
http://www.codinghorror.com/blog/archives/000729.html
( архивная версия вышеупомянутой веб-статьи: http://web.archive.org/web/20100221082159/http://www.codinghorror.com/blog/2006/11/filesystem-paths-how-long-is-too-long.html
новая версия:
https://blog.codinghorror.com/filesystem-paths-how-long-is-too-long/ )
“классический” предел составляет 260 символов: буква диска
+ :\
+ 255 символов имени файла
+ \
(или для округления) + нулевой терминатор
, как сказано в других ответах.
Тем не менее, реальный внутренний предел составляет 32767 символов, который можно достичь, добавив \\?\
, чтобы получить полностью квалифицированный путь.
Windows API имеет множество функций, которые также имеют версии Unicode для обеспечения пути увеличенной длины с максимальной общей длиной пути в 32 767 символов. Этот тип пути состоит из компонентов, разделённых обратными слешами, каждый из которых имеет значение, возвращаемое в параметре
lpMaximumComponentLength
функцииGetVolumeInformation
(это значение обычно составляет 255 символов). Чтобы указать путь увеличенной длины, используйте префикс"\\?"
. Например,"\\?\D:\очень длинный путь"
.
Если по каким-то причинам полностью квалифицированные пути не могут быть использованы, то более глубокие директории могут быть доступны, присваивая букву диска с помощью subst
/diskpart
или создавая ссылку/символическую ссылку, чтобы сократить путь.
Начиная с версии 1607 Windows 10, предел MAX_PATH
также был удалён, хотя и не по умолчанию.
Начиная с Windows 10, версии 1607, ограничения
MAX_PATH
были удалены из обычных Win32 функций работы с файлами и директориями. Однако вы должны перейти на новое поведение.https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file
Обратите внимание, что ответ Джо совершенно неверен. Максимальная (длинная) длина имени файла всегда была 255 символов, а MAX_PATH
всегда оставался равным 260.
Константа Windows MAX_PATH
равна 260, как указывают другие ответы, однако реальная максимальная длина пути составляет 32767.
Смотрите здесь.
32k — это при использовании UNICODE, но теперь мы должны его использовать, так что мы также должны использовать такую максимальную длину пути.
Также вы можете ознакомиться с моим ответом на SO, который объясняет некоторые вещи более подробно о максимальной длине пути.
Ответ или решение
Вопрос о максимальной длине пути к файлам в Windows имеет несколько важных аспектов, которые стоит учитывать для полного понимания:
-
Традиционное ограничение: В стандартном API Windows максимальная длина пути определена как MAX_PATH, что равно 260 символам. Это ограничение включает букву диска, двоеточие, обратные слэши, компоненты пути и терминальный нулевой символ. Например, максимальный путь на диске D может выглядеть так:
D:\<какая-либо строка пути длиной 256 символов><NUL>
. -
Изменения в различных версиях Windows:
- В Windows XP максимальная длина пути составляет 260 символов, но на практике, из-за структуры файловой системы, длина часто оказывается меньше — около 152 символов.
- В Windows Vista максимальная длина пути остается 260 символов, но также может варьироваться в зависимости от стиля установки.
- В Windows 10 (начиная с версии 1607) ограничения максимальной длины пути в 260 символов были сняты, однако для этого необходимо активировать данную опцию.
-
Возможность использования длинных путей: Реальное внутреннее ограничение длины пути в Windows составляет 32767 символов. Чтобы воспользоваться этим ограничением, необходимо добавить префикс
\\?\
перед путем. Например, путь может выглядеть так:\\?\D:\очень длинный путь
. Эти длинные пути поддерживают только функции API, которые используют UNICODE. -
Другие подходы: Если по какой-либо причине использование длинных путей с префиксом невозможно, можно рассмотреть возможность монтирования длинных путей на букву диска с помощью команд
subst
илиdiskpart
. Также можно использовать символические ссылки или джанкции, чтобы укоротить путь.
В заключение, хотя исторически максимальная длина пути в Windows ограничена 260 символами, в современных версиях системы, за счет использования длинных путей с префиксом, это ограничение может быть существенно увеличено до 32767 символов. Рекомендуется использовать Unicode и следовать последним версиям Windows для оптимальной работы с длинными путями к файлам.