Calcweb.ru

Информационный портал
72 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как узнать, имеются ли в вашей Windows пути, длина которых превышает 260 символов

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

date07.04.2020
useritpro
directoryWindows 10
commentsкомментария 22

Большинство администраторов и пользователей 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. Перейдите в раздел редактора LocalComputerPolicy -> ComputerConfiguration -> AdministrativeTemplates -> System -> Filesystem -> NTFS (Конфигурация компьютера -> Административные шаблоны -> Система -> Файловая система -> NTFS)Групповые политики NTFS
  3. Откройте политику Enable NTFS long pathsEnable NTFS long paths включить поддержку путей более 260 символов
  4. Включите политику, переведя ее в состояние Enabled
  5. Сохраните изменения

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

LongPathsEnabled - параметр реестра

  1. Запустите редактор реестра regedit.exe
  2. Перейдите в ветку HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionGroup Policy Objects<48981759-12F2-42A6-A048-028B3973495F>MachineSystemCurrentControlSetPolicies
  3. Создайте в данной ветке новый параметр типа Dword(32-bit)Value с именем LongPathsEnabled

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

Этот функционал доступен всем пользователям Windows 10, начиная с Anniversary Update (1607), и в Windows Server 2016.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Узнай, если Windows пути к файлам превышают ограничение в 260 символов

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

Microsoft добавила опцию в Windows несколько лет назад, чтобы увеличить предел пути, см. Microsoft завершает ограничение длинного пути 260 (вроде), но до сих пор поддержка не была добавлена ​​глобально. Другими словами: есть шанс, что вы все еще можете столкнуться с ограничением пути на Windows машины даже сегодня.

Сторонние инструменты были созданы для решения проблем, связанных с ограничением пути на Windows машины. Мы рассмотрели Long Path Fixer уже в прошлом; на этот раз это средство проверки длины пути, которое предназначено только для отчетов, но все же полезно.

Проверка длины пути

средство проверки длины пути

Загрузите последнюю версию программы с сайта репозитория GitHub. Вам необходимо распаковать архив после того, как он был загружен, и после этого можно запустить его версию с графическим интерфейсом пользователя, чтобы начать работу.

Все, что требуется на базовом уровне, — это выбрать начальный каталог, например диск c: или папку на любом из подключенных дисков, и нажать кнопку «получить длину пути» после того, как выбор будет сделан. Также поддерживается перетаскивание каталога в окне программы.

Сканирование может занять некоторое время, но во время тестов скорость была приемлемой (не более нескольких минут).

Результаты отображаются в таблице, и вы можете щелкнуть заголовки столбцов для соответствующей сортировки данных, например, по длине пути. Вывод можно скопировать в буфер обмена; для этого вы должны выбрать одну или несколько записей и опцию «копировать пути в буфер обмена». Щелчок по значку со стрелкой вниз рядом с кнопкой открывает возможности для сохранения выбора в файл CSV.

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

Средство проверки длинного пути включает версию командной строки, которую вы можете запустить, и сценарий PowerShell для его запуска из PowerShell.

Закрытие слов

Long Path Checker — удобный инструмент для проверки Windows каталоги для потенциальных нарушений пути. Это удобно для разработчиков, системных администраторов, а также для домашних пользователей. Обратной стороной является то, что он не включает никаких опций для решения проблем, связанных с путями в системе.

Выбираем длинный путь (или прощай MAX_PATH)

Многим пользователям ПК под управлением ОС Windows, не говоря о разработчиках, знакомы проблемы при работе с длинными (более 260 символов, MAX_PATH) путями файлов или каталогов.

В данной статье рассматриваются способы избавления от этого пережитка при разработке приложений на различных платформах (WinApi, .Net Framework, .Net Core) и активации нативной поддержки длинных путей в Windows 10 (Anniversary Update).

Приложения Win API

В приложениях, которые используют Win API для работы с файлами, рецепт избавления от ограничения MAX_PATH был известен с незапамятных времён – необходимо было использовать Unicode версию функции с окончанием «W» для работы с директорией или файлом и начинать путь с префикса \?. Это давало возможность использовать пути длинной до 32767 символов.

В Windows 10 (1607) поведение функций для работы с файлами изменилось: появилась возможность отключить проверку ограничений MAX_PATH на уровне системы.

Это избавляет от необходимости использовать префикса \? и потенциально даёт шанс приложениям, работающим напрямую или косвенно через Win API, получить поддержку длинных путей без необходимости их пересборки. Как активировать эту возможность описано в конце статьи.

.Net Framework

Хотя .Net Framework и использует Win API для работы с файлами — предыдущее изменение не принесло бы результата, т.к. в код BCL встроены предварительные проверки на допустимость длинны имён каталогов и файлов, и до вызова функций Win API дело даже не доходило, выдавая известное исключение. По многочисленным просьбам сообщества (более 4500 на UserVoice) в версии 4.6.2 из кода BCL вырезали проверки ограничения длинны пути, отдав это на откуп операционной и файловой системам!

  • При использовании префикса “\?” мы можем работать с длинными путями как в Win API,
  • Если активировать нативную поддержку длинных имен файлов Windows 10 (1607), то даже не потребуется использовать префикс!
  • Использовать .Net Framework 4.6.2 как цель при сборке приложения.
  • Использовать конфигурационный файл, например, если приложение уже было собрано под .Net 4.0:
.Net Core

Тут поддержку длинных путей анонсировали ещё в ноябре 2015 года. Видимо сказалось Open Source природа проекта и отсутствие строгой необходимости обеспечения обратной совместимости.

Как включить:
Всё работает из коробки. В отличие от реализации в .Net Framework – тут нет необходимости в добавлении префикса “\?” – он добавляется автоматически при необходимости.

Вот тут можно посмотреть пример.

Как включить поддержку длинных путей в Windows 10 (1607)

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

Включить встроенную поддержку длинных путей можно создав или изменив следующий параметр системного реестра: HKLMSYSTEMCurrentControlSetControlFileSystem Параметр LongPathsEnabled (Тип: REG_DWORD) 1 – соответствует значению включено.

Или через групповые политики (Win+Rgpedit.msc) Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths.Оно же в локализованном варианте: Конфигурация компьютера > Административные шаблоны > Система > Файловая система > Включить длинные пути Win32.

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

С CMD, к сожалению, это не сработает, на данный момент, из-за особенностей работы с путями, а в PowerShell должно всё заработать.

На этом мой небольшой пятничный пост заканчивается, оставив за рамками вопросы полноты реализации поддержки длинных путей в Windows 10 (1607), или работоспособность при использовании различных комбинаций редакций Windows, файловых систем и API. По мере поступления новых фактов и результатов экспериментов пост будет обновляться.

Как найти файлы с длиной пути, превышающей 260 символов в Windows?

Я использую xcopy в Windows XP script, чтобы рекурсивно скопировать каталог. Я продолжаю получать ошибку «Недостаточно памяти», которая, как я понимаю, связана с тем, что файл, который я пытаюсь скопировать, имеет слишком длинный путь. Я могу легко уменьшить длину пути, но, к сожалению, я не могу решить, какие файлы нарушают ограничение длины пути. Скопированные файлы печатаются на стандартный вывод (который я перенаправляю в файл журнала), но сообщение об ошибке печатается на терминале, поэтому я даже не могу определить, в какой директории это ошибка.

ОТВЕТЫ

Ответ 1

сделайте a dir /s /b > out.txt , а затем добавьте руководство в положение 260

В powershell cmd /c dir /s /b |?

Ответ 2

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

Я также написал и написал о простой PowerShell script для получения длины файла и каталога. Он выведет длину и путь к файлу и, возможно, также напишет его на консоль. Он не ограничивает отображение файлов, которые находятся на определенной длине (простая модификация), но отображает их по убыванию по длине, поэтому по-прежнему очень легко увидеть, какие пути находятся за пределами вашего порога. Вот он:

Ответ 3

Как уточнение простейшего решения, и если вы не хотите или не хотите устанавливать Powershell, просто запустите:

И строки длиной более 260 вернутся к листингу. Обратите внимание, что вы должны добавить 1 в параметр столбца SORT (/+ n).

Ответ 4

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

Предупреждение: Код перезаписывает «longfilepath.txt» в текущем рабочем каталоге. Я знаю, что вряд ли у вас его есть, но на всякий случай!

Целенаправленно хотелось в одной строке:

Подробные инструкции:

  • Запустить PowerShell
  • Перейдите в каталог, который вы хотите проверить на длину пути к файлу (C: works)
  • Скопируйте и вставьте код [Щелкните правой кнопкой мыши для вставки в PowerShell или Alt + Space > E > P]
  • Подождите, пока он не будет выполнен, а затем просмотрите файл: cat longfilepath.txt | sort

Объяснение:

Out-File longfilepath.txt ; — Создайте (или перезапишите) пустой файл под названием longfilepath.txt. Секунда для разделения команд.

cmd /c «dir /b /s /a» | — Запустить команду dir на PowerShell, /a , чтобы показать все файлы, включая скрытые файлы. | в трубку.

ForEach-Object < if ($_.length -gt 250) <$_ | Out-File -append longfilepath.txt>> — для каждой строки (обозначается как $_), если длина больше 250, добавьте эту строку в файл.

Ответ 5

вы можете перенаправить stderr.

больше объяснений здесь, но имея команду вроде:

должен захватить данные, которые вы ищете.

Кроме того, в качестве трюка Windows обходит это ограничение, если путь имеет префикс \? (msdn)

Другой трюк, если у вас есть корень или место назначения, которое начинается с длинного пути, возможно, SUBST поможет:

Ответ 6

первая часть просто выполняет итерацию через эту и подпапки; использование -ErrorVariable AccessDenied означает нажимать оскорбительные элементы в переменную powershell AccessDenied .

Затем вы можете сканировать эту переменную так

Если вам не нравятся эти файлы (может быть применимо в некоторых случаях), просто отпустите часть -ErrorVariable AccessDenied .

Ответ 7

Для путей больше 260:
вы можете использовать:

Пример по 14 символам:
Чтобы просмотреть длины путей:

Получить пути больше 14:

Скриншот:
enter image description here

Для имен файлов больше 10:

Скриншот:
enter image description here

голоса
Рейтинг статьи
Читайте так же:
Кейс. 28000 ₽ с Google Ads на БЕСПЛАТЕ по КЗ
Ссылка на основную публикацию