Максимальная длина пути к файлу – Regex для относительного максимального размера пути к файлу и максимального размера имени папки

Сравнение файловых систем — Википедия

Максимальная длина имён файловДопустимые символы в названиях[II 1]Максимальная длина пути файлаМаксимальный размер файлаМаксимальный размер тома[II 2]
RT-116+3 символа в коде RADIX50AZ, 09, $, ., %, пробел14 символов32 МиБ (65536 × 512)32 МиБ
V6FS14 байт[II 3]Любые символы, кроме NUL и /[II 4]Нет установленных ограничений[II 5]8 МиБ[II 6]2 ТиБ
V7FS14 байт[II 3]Любые символы, кроме NUL и /[II 4]Нет установленных ограничений[II 5]1 ГиБ[II 7]2 ТиБ
FAT128+3 символов (255 байт для VFAT)[II 3]Любые символы ANSI (Unicode для VFAT), кроме NUL[II 3][II 4]Нет установленных ограничений[II 5]32 МиБ1 МиБ — 32 МиБ
FAT168+3 символов (255 байт для VFAT)[II 3]Любые символы ANSI (Unicode для VFAT), кроме NUL,[II 3][II 4]Нет установленных ограничений[II 5]2 ГиБ16 МиБ — 2 ГиБ
MFS30 байт[II 3]Любые символы, кроме NUL и :[II 4]Нет установленных ограничений[II 5]??
HFS30 байт[II 3]Любые символы, кроме NUL и :[II 4]Нет установленных ограничений[II 5]??
FAT32255 байт[II 3]Любые символы Юникода, кроме NUL
[II 3]
[II 4]
Нет установленных ограничений[II 5]4 ГиБ512 МиБ — 8 ТиБ[II 8]
HPFS255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5]4 ГиБ2 ТиБ[II 9]
NTFS255 символовЛюбые символы Юникода, кроме «NUL» и / для POSIX или «NUL», /, \, ", *, ?, <, >, |, : для Win32[II 10]32767 символов Юникода; каждая компонента пути (каталог или имя файла) — до 255 символов[II 5]16 ЭиБ[II 11]16 ЭиБ[II 11]
HFS+255 символов[II 12]Любые символы Юникода, кроме NUL[II 4][II 13]
?8 ЭиБ8 ЭиБ
FFS255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5]4 ГиБ256 ТиБ
Amiga FFS30 байтЛюбые символы, кроме NUL, / и :Нет установленных ограничений[II 5]2 ГиБ4 ГиБ
SFS107 байтЛюбые символы, кроме NUL, / и :Нет установленных ограничений[II 5]4 ГиБ128 ГиБ
PFS331-106 байт[II 14]Любые символы, кроме NUL, / и :Нет установленных ограничений[II 5]108 ГиБ2 ТиБ
UFS1255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5] 4 ГиБ — 256 ТиБ256 ТиБ
UFS2255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5]512 ГиБ — 32 ПиБ1 ЙиБ
ext2255 байтЛюбые символы, кроме NUL, /[II 4]Нет установленных ограничений[II 5]16 ГиБ — 2 ТиБ[II 2]2 ТиБ — 32 ТиБ
ext3255 байтЛюбые символы, кроме NUL, /[II 4]Нет установленных ограничений[II 5]16 ГиБ — 2 ТиБ[II 2]2 ТиБ — 32 ТиБ
ext4255 байтЛюбые символы, кроме NUL, /[II 4]Нет установленных ограничений[II 5]16 ГиБ — 16 ТиБ[II 2]1 ЭиБ
ReiserFS4032 байт/255 символовЛюбые символы, кроме NUL,
/
[II 4]
Нет установленных ограничений[II 5]8 ТиБ[II 15]16 ТиБ
Reiser4??Нет установленных ограничений[II 5]8 ТиБ on x86?
XFS255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5]9 ЭиБ[II 16]9 ЭиБ[II 16]
JFS255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5]8 ЭиБ512 ТиБ — 4 ПиБ
JFS2255 байтЛюбые символы Юникода, кроме NULНет установленных ограничений[II 5]4 ПиБ32 ПиБ
Be File System255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений
[II 5]
12 КиБ — 260 ГиБ[II 17]256 ПиБ — 2 ЭиБ
AdvFS255 символовЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5]16 ТиБ16 ТиБ
NSS256 символовЗависит от используемого пространства имён[II 18]Ограничивается только возможностями клиента8 ТиБ8 ТиБ
NWFS80 байт[II 19]Зависит от используемого пространства имён[II 18]Нет установленных ограничений[II 5]4 ГиБ1 ТиБ
ODS-5236 байт[II 20]?4096 байт[II 21]1 ТиБ1 ТиБ
VxFS255 байтЛюбые символы, кроме NUL[II 4]Нет установленных ограничений[II 5]16 ЭиБ?
UDF255 байтЛюбые символы Юникода, кроме NUL1023 байт[II 22]16 ЭиБ?
ZFS255 байтЛюбые символы Юникода, кроме NULНет установленных ограничений[II 5]16 ЭиБ16 ЭиБ
Btrfs255 байтЛюбые символы Юникода, кроме NUL и /Не менее 2¹⁷ байт16 ЭиБ16 ЭиБ
exFATНеизвестноЛюбые символы Юникода, кроме NULНет установленных ограничений16 ЭиБ64 ЗиБ[II 23] в теории 512 ТиБ
ReNTFS255 символов[II 24]Любые символы Юникода, кроме NUL?16 ЭиБ1 ЙиБ
APFSНеизвестноНеизвестноНеизвестно8 ЭиБНеизвестно
Максимальная длина имён файловДопустимые символы в названиях[II 1]Максимальная длина пути файлаМаксимальный размер файлаМаксимальный размер тома[II 2]

Ограничение длины файлов в Windows особенности и тонкости

– Автор: Игорь (Администратор)

Вы когда-нибудь сталкивались с сообщением об ошибке в Windows, в котором говорилось бы о не возможности скопировать (переместить) файл и о том, что имя одного из файлов слишком большое? Если да, то вы, наверное, задавались вопросом почему такое сообщение появилось (пример ниже на картинке). В данной статье будут объяснены особенности и тонкости ограничений, которые накладываются на длину имени файла в Windows.

В зависимости от структуры файловой системы, на длину имен файлов будут накладываться различные ограничения. Важно помнить и понимать, что имя файла складывается не только из расширения и того названия, которое вы дали ему при создании. Имя файла включает в себя всю необходимую операционной системе информацию для точной идентификации файла. Другими словами, имя файла включает в себя диск и все каталоги, внутри которых находится файл. Кроме того, имя может содержать различную системную информацию (и не обязательно, что вы ее будете где-либо видеть).

Примечание: Если вы не знали, то в большинстве файловых систем каталог — это разновидность файла, но с нулевым размером данных.

Существует множество различных файловых систем, каждая из который по-своему определяет структуру имени файла, включая способ построения пути к файлу. К примеру, на небольших usb устройствах хранения данных, обычно, используется система FAT32. А на оптических дисках (CD/DVD) обычно используется UDF или ISO 9660. На системных дисках последних ОС Windows используется файловая система NTFS, которая и станет предметом данной статьи (как наиболее распространенна

Длинные пути в Windows 10

Практически каждый пользователь Windows рано или поздно сталкивается с ошибкой ″слишком длинный путь″ (path too long). Ошибка эта возникает при работе с файлами или папками, у которых полный путь превышает значение в 260 символов.

Напомню, что полный путь включает в себя букву диска, двоеточие, обратный слэш, имена компонентов (файл, директория) разделенные слешем и завершающий пустой символ (NUL). Выглядит полный путь примерно так:

C:\directory\subdirectory\filename<NUL>

Соответственно, если сумма всех компонентов пути больше 260 символов, то путь считается слишком длинным. Большинство приложений Windows не умеют работать с такими путями и при обращении к файлу\папке выдадут примерно такое сообщение:

ошибка "path too long"

 

Что интересно, значение в 260 символов обусловлено значением MAX_PATH Win32 API. У файловой системы NTFS максимальная длина пути ″немного″ больше и составляет  32767 символов. Для обхода ограничений Win32 API некоторые приложения используют формат UNC, указывая абсолютный путь с префиксом \\?\, например так:

\\?\C:\directory\subdirectory\filename

В Windows 10 (начиная с версии 1607) появилась возможность отключить проверку MAX_PATH и использовать длинные пути без префикса \\?\ . Сделать это можно двумя способами — с помощью групповых политик или путем редактирования реестра. Мы рассмотрим оба способа, начнем с политик.

Групповые политики

Первым делом  открываем редактор локальных групповых политик, для чего жмем клавиши Win+R и выполняем команду gpedit.msc.

запуск оснастки локальных групповых политик

 

Нужная нам политика находится в разделе Конфигурация компьютера\Административные шаблоны\Система\Файловая система (Computer configuration\Administrative templates\System\Filesystem) и называется Включить длинные пути Win32 (Enable Win32 long paths).

выбор политики включения длинных путей

 

Для активации поддержки длинных путей надо перевести политику в состояние «Включено».

включение политики

Реестр

Для включения поддержки длинных путей через реестр необходимо найти в разделе HKLM\System\CurrentControlSet\Control\FileSystem параметр с именем LongPathEnabled и задать его значение равным 1.

включение длинных путей через реестр

 

Эту операцию можно произвести с помощью PowerShell, командой:

Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -Value 1

В обоих случаях потребуется перезагрузить компьютер. После перезагрузки изменения вступят в силу и для путей будет действовать только ограничение файловой системы NTFS (32767 символа), превысить которое вам навряд ли удастся. Однако это вовсе не значит, что можно расслабится. В некоторых приложениях проверка MAX_PATH заложена в коде,  поэтому  по возможности лучше не превышать это ограничение.

Дополнение

Для того, чтобы пользоваться длинными путями, в приложении должна быть включена их поддержка.  Если вы пишите собственное приложение, то для поддержки длинных путей в манифесте приложения надо указать следующие настройки:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>

А теперь о грустном. Как внезапно оказалось, в проводнике Windows поддержка длинных путей не реализована!!! Один из разработчиков Microsoft по этому поводу сказал примерно следующее:

″Эта функция не готова для включения в Windows Explorer. Вам нужно подождать, пока Microsoft не включит ее в Explorer, или использовать сторонний инструмент управления файлами, который совместим с длинными путями. ″

Это было сказано еще в 2016 году. Но, судя по всему, разработчики на данную проблему просто забили. На данный момент в версии 1903 проводник все так же не поддерживает длинные пути файлов. Вот так 🙁

Исправить проблему с длинным именем файла

Если вы когда-либо видели эту проблему, это, вероятно, было простым решением для вас. Если вы видели эту ошибку более двух раз, то вы также знаете, что иногда это может быть сложной проблемой.

Будем надеяться, что вы столкнетесь только с набором легких исправлений, но мы подготовим вас к менее простым, гарантированно исправным исправлениям.

Почему длина имени файла является проблемой в Windows?

Существует большая история длины файлов, что является проблемой для операционных систем, таких как Windows. Было время, когда вы не могли иметь имена файлов длиннее 8 символов плюс 3-символьное расширение файла. Лучшее, что вы могли сделать, это что-то вроде myresume.doc. Это было ограничение в отношении дизайна файловой системы.

Все стало лучше, когда вышли новые версии Windows. Мы перешли от старой ограниченной файловой системы к так называемой файловой системе новой технологии (NTFS). NTFS привела нас к тому, что имя файла может быть длиной 255 символов, а длина пути к файлу потенциально может достигать 32 767 символов. Так как же мы можем иметь слишком длинные имена файлов?

В Windows есть вещи, известные как системные переменные. Это переменные, от которых зависит функционирование Windows, потому что Windows всегда будет знать, что означают переменные и где они находятся, даже когда мы перемещаем биты и байты повсюду. Системная переменная MAX_PATH — это та, которая ограничивает имена файлов и пути к файлам до 260 символов.

Будучи переменной, вы думаете, мы могли бы изменить это. Нет, мы не должны. Это все равно что выдернуть нитку из свитера. Как только одна системная переменная изменяется, другие системные переменные и зависимые от них компоненты начинают ра

Существует ли предел длины имени файлов в Windows

Смотрите также Как в Windows 10 включить поддержку пути к файлам длиной более 260 символов.

Во всех операционных системах и для всех файловых систем существуют определённые лимиты на:

  • размер имени файла
  • на полный путь файла (который включает папки и подпапки)

Операционная система Windows не является исключением, в ней длина имени файла или папки ограничена 255 символами, а вся длина пути ограничена примерно 32,000 символами.

Имеется ряд исключений, когда разрешённая длина файла должна быть меньше этих значений:

  • предыдущие версии Windows
  • сетевые диски
  • оптические диски CD и DVD

К сожалению, Windows весьма «молчалив» в ситуациях, когда возникают проблемы с длиной имени файла или пути на сетевых носителях. В результате, часть файлов может отображаться нормально, а часть отсутствовать. Если файлов много, то не всегда просто понять, все ли они на месте. Признаками того, что некоторые файлы на сетевой папке имеют слишком длинное имя является:

  • отсутствует файл, который точно должен быть или который виден при подключении диска напрямую (а не через сеть)
  • при создании файла возникает ошибка, что такой файл уже существует, хотя его не видно

При поиске по файлам средствами ОС, эти файлы также недоступны для индексации и поиска по ним.

Все программы, от стандартного проводника Windows до сторонних файловых менеджеров не способны увидеть эти файлы со слишком длинными именами, при этом каких-либо ошибок не возникает.

Подтвердить проблему слишком длинного имени на сетевом носителе можно командой вида:


dir "\\путь\до\папки"

Например команда:


dir "\\VBOXSVR\Share\Архив работ\УП\"

вызывает следующую ошибку из-за того, что в папке имеется файл со слишком длинным именем:


    Каталог: \\VBOXSVR\Share\Архив работ\УП


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       24.08.2010     17:29                Общая часть
d-----       17.02.2019     16:10                Особенная часть
d-----       01.11.2018     10:24                Чужое
dir : Параметр задан неверно.
строка:1 знак:1
+ dir "\\VBOXSVR\Share\Архив работ\УП\"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (\\VBOXSVR\Share\Архив работ\УП\:String) [Get-ChildItem], IOException
    + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

Если вы работаете с сетевым диском и он подключён к Linux, то вам может помочь инструкция «Как найти имена файлов, чья длина превышает определённое значение».

В остальных случаях, попробуйте следующие советы:

1. (если слишком длинный путь до файла) Вначале скопируйте папку на более высокие уровни в windows эксплорере и затем переместите их на ваш локальный компьютер

2. (если имена файлов слишком длинные) Вначале попробуйте поместить их в архив программами zip/rar/7z и затем скопируйте файл архива на свой локальный компьютер и извлеките его содержимое

3. Попробуйте встроенную программу ROBOCOPY:


robocopy /E ИСТОЧНИК НАЗНАЧЕНИЕ

4. Попробуйте перед путём добавить \\?\


\\?\C:\Some\Really\Long\Path

5. Используйте сторонне программное обеспечение (о нём далее)

FastCopy — это проект с открытым исходным кодом на C, написанный SHIROUZU Hiroaki и это «Самое быстрое программное обеспечение для копирования/удаления файлов на Windows.» Программа поддеррживает UNICODE и более чем MAX_PATH (260 символов) в путях имён файлов.

Если имеются сотни путей, которые слишком долго исправлять, то используйте инструмент «Path Tool Long Auto Fixer».

Связанные статьи:

Как в Windows 10 отключить ограничение на длину пути в 260 символов

Большинство администраторов и пользователей Windows при работе с файлами, так или иначе сталкивались с ошибкой “path too long”. Эта ошибка возникает при превышении полного пути к файлу (вместе с его именем) значения 260 символов. Многие приложения, в том числе проводник Windows, неправильно работают с такими длинными именами файлов, оказываясь их открывать, перемещать и удалять. Это ограничение не файловой системы NTFS, а библиотеки Win32 API (подробнее о проблеме и обходных способах ее решения рассказано здесь).

В новой сборке Windows 10 Insider Preview Build 14352 доступной участникам программы Windows Insider, появилась новая возможность отключить ограничение на максимальную длину пути.

Отключить ограничение MAX_PATH можно двумя способами: с помощью редактора групповых политик или через реестр. Рассмотрим оба:

  1. Запустите консоль редактора локальной групповой политики, нажав Win+R и выполнив команду gpedit.msc
  2. Перейдите в раздел редактора Local Computer Policy -> Computer Configuration -> Administrative Templates -> System -> Filesystem -> NTFS (Конфигурация компьютера -> Административные шаблоны -> Система -> Файловая система -> NTFS)Групповые политики NTFS
  3. Откройте политику Enable NTFS long pathsEnable NTFS long paths  включить поддержку путей более 260 символов
  4. Включите политику, переведя ее в состояние Enabled
  5. Сохраните изменения

При использовании домашней версии Windows 10, в которой отсутствует редактор GPO, это же изменение можно внедрить с помощью редактора реестра.

  1. Запустите редактор реестра regedit.exe
  2. Перейдите в ветку HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  3. Создайте в данной ветке новый параметр типа Dword (32-bit) Value с именем LongPathsEnabledLongPathsEnabled - параметр реестра
  4. Чтобы отключить ограничение MAX_PATH, измените значение ключа на 1

Для вступления изменений в силу в обоих случаях требуется перезагрузка компьютера. После перезагрузки пользователи и программы смогут без ограничений работать с файлами, длина пути к которым превышает 260 символов. Теперь на файлы будет действовать только ограничение файловой системы NTFS – 32767 символов .

Судя по комментариям специалистов Microsoft, этот функционал будет доступен всем пользователям после установки Windows 10 Anniversary Update, которое будет доступно этим летом и приурочено к годовщине выхода Windows 10, и в RC Windows Server 2016.

Как удалить файл с длиной пути более 260 символов

Не секрет, что проводник Windows, как и большинство других Windows-приложений, включая PowerShell, не умеют работать с объектами файловой системы с глубокой вложенностью папок, длина пути к которым превышает 260 символов. Причем это ограничение существует только на уровне приложений, а сама файловая система NTFS поддерживает пути к файлам вплоть до 32767 символов.


Данное ограничение наложено библиотекой Win32 API, а которой максимальная  длина пути составляет 260 символов (MAX_PATH=260). В общем случае путь формируется из следующих элементов:  [C:\]+[путь_из_256_символов]+[<NUL>], причем максимальная длина одного каталога/файла в NTFS  — 255 символов в Unicode. При использовании юникодных функций API, возможно использовать путь до 32767 символов. Благодаря этому многие сторонние программы (те же популярные файловые менеджеры, например FAR и Total Commander) без каких-либо трудностей обрабатывает файлы/папки, длина пути к которым превышает 260 символов.

Совет. Обойти это ограничение Win32 API и работать с длинными именами файлов можно за счет использования UNC-формата пути, указывая абсолютный путь к файлу с использованием префикса extended-length path \\?\. Например, так \\?\C:\SomeLongPath\LongNameFile.txt

Это ограничение также не действует при сетевом доступе пользователей к файлам по протоколу SMB (за счет этого каталожные структуры с длинными путями нередкость именно на файловых серверах с пользовательскими данными). Администратор, обслуживающий данный сервер не может через стандартный интерфейс проводника Windows Explorer управлять (удалять/перемещать) файлы с длинными путями. При попытке создать/скопировать файл в такой каталог, появляется ошибка:

Destination Path Too Long. The file name (s) would be too long for the destination folder. You can shorten the file name and try again, or try a location that has a shorten path

Ограничение на длину пути в Windows

Другие программы/диалоговые окна могут сообщать о наличии ограничения по своему.

Согласитесь забавно, что за окном 2014 год, а мы до сих пор говорим об ограничении в 260 символов на максимальную длину пути в Windows… Но похоже в ближайшее время никаких кардинальных изменений не предвидится, и даже в совсем свежей Windows 10 Technical Preview это ограничение все еще существует.

В этой статье мы покажем, как в Windows можно работать с файлами, путь к которым превышает 260 символов. В данном кейсе наша задача – удалить каталог, содержащий файлы с большой длиной пути.

При попытке удалить такой каталог из проводника появляется ошибка:

The file name(s) would be too long for the destination folder. You can shorten the file name and try again, or try a location that has a shorten path.

Ошибка удаления файла с большой длиной пути

Powershell также не умеет корректно обрабатывать каталоги и файлы с большими путями, превышающими 260 символов. При попытке удалить каталог с такими файлами (C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath) появляется ошибка:

Remove-Item .\verylongpath -Recurse

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260
characters, and the directory name must be less than 248 characters.
At line:1 char:1
+ Remove-Item .\verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : WriteError: (C:\Install\MS S...it\verylongpath:String) [Remove-Item], PathTooLongExcepti
on
+ FullyQualifiedErrorId : RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

Ошибка при удалении каталога с помощью командлета Powershell Remove-Item

Самый простой вариант (он, собственно, и предлагается в окне с ошибкой) – сократить название родительских папок, уменьшив общую длину пути (но применимо не всегда).

Другой вариант – создать символическую ссылку на часть пути, укоротив тем самым общую длину пути:

mklink /d c:\install\link “C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath”

Далее файловые операции проводить с каталогом, на который назначена символьная ссылка.

Еще один вариант, напоминающий работу с символьной ссылкой  — сопоставить проблемную папку виртуальному диску (в нашем примере X: ), тем самым также сократив длину пути:

Subst X: “C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath”

Теперь можно работать с данными на диске X:, пути к файлам в котором не будут превышать лимит. После окончания работы можно удалить виртуальный диск:

Subst X: /d

Но лично мне больше всего для задачи удаления данных в таких ситуациях нравится возможности robocopy.exe, которая поддерживает работу с длинными путями.

С помощью опции /MIR, утилита robocopy может создать полную копию (зеркало) исходного каталога в целевом. И, если исходная папка пустая, все данные в целевой папке также очищаются. Создадим пустую папку C:\Install\test и с помощью аргумента /MIR выполним копирование содержимое тестовой папки в целевую (если имя папки содержит пробелы или кириллические символы, путь нужно взять в кавычки).

robocopy /MIR C:\Install\test "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"

robocopy /mir - создаем зеркало пустого каталогаrobocopy /MIR

После выполнения команды содержимое каталога C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath очищается (заменятся содержимым пустого каталога).

Итак, сегодня мы показали несколько простых трюков, которые можно использовать при работе с папками на файловых серверах, содержащих папки, длина пути к которым превышает лимит 260 символов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *