Преодоление ограничений длины пути к файлу в Windows

Один из наших клиентов обычно использует очень длинные имена путей (несколько вложенных папок с длинными именами), и мы регулярно сталкиваемся с «проблемами обучения пользователей», чтобы сократить путь до менее 260 символов.

Есть ли доступное техническое решение, можем ли мы щелкнуть какой-то коммутатор в Windows 7 и Windows 2008 R2, чтобы сказать «да, просто проигнорируйте эти исторические проблемы и создайте имя пути +260 символов».

P.S. Я прочитал и полностью не отредактирован Именование файлов, путей и пространств имен

22 голоса | спросил Christopher Edwards 9 FebruaryEurope/MoscowbWed, 09 Feb 2011 01:29:26 +0300000000amWed, 09 Feb 2011 01:29:26 +030011 2011, 01:29:26

4 ответа


12

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

ответил sysadmin1138 9 FebruaryEurope/MoscowbWed, 09 Feb 2011 01:41:35 +0300000000amWed, 09 Feb 2011 01:41:35 +030011 2011, 01:41:35
23

Просто упомянуть трюк, о котором я еще не упоминал.

Возьмите этот файл, например:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Этот полный путь к файлу имеет длину 290 символов. Оболочка (проводник Windows) и большинство утилит командной строки, вероятно, не позволят вам коснуться ее.

Используйте команду subst:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

Теперь вы можете получить доступ (и удалить, переместить и т. д.) файл таким образом:

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

И теперь, когда имя файла составляет всего ~ 235 символов или около того, вы больше не столкнетесь с проблемами «Filename is too long».

В API Windows существует известная константа, известная как MAX_PATH. MAX_PATH - 260 символов. Файловая система NTFS фактически поддерживает пути файлов до 32 767 символов. И вы все равно можете использовать имена путей длиной 32,767 символов, обратившись к Unicode (или «широким») версиям функций Windows API, а также путем префикса пути с помощью \\?\

MAX_PATH был установлен в камне a очень долго в мире Windows. Я думаю, что это имеет какое-то отношение к стандартам ANSI в то время ... но это одна из тех вещей, которые сейчас очень сложно изменить Microsoft, так как теперь у нас есть тысячи программ и приложений, в том числе некоторые из написанных самими Microsoft, которые используют MAX_PATH, и если бы константа была внезапно изменена, она поскользнулась бы по-новому. (Переполнение буфера, повреждение кучи и т. Д.)

ответил Ryan Ries 25 ThuEurope/Moscow2014-12-25T20:31:27+03:00Europe/Moscow12bEurope/MoscowThu, 25 Dec 2014 20:31:27 +0300 2014, 20:31:27
10

Вы можете обойти это ограничение, используя обозначение \\? \ C:. Это уродливо, но поддерживает длину файла до 2 ^ 15.

http://msdn.microsoft .com /EN-US /библиотека /aa365247 (v = vs.85) .aspx # maxpath

ответил Chris K 9 FebruaryEurope/MoscowbWed, 09 Feb 2011 03:00:20 +0300000000amWed, 09 Feb 2011 03:00:20 +030011 2011, 03:00:20
7

У Microsoft теперь есть исправление для этого, начиная с Windows 10, что объясняется в Именование файлов, путей и пространств имен Статья в MSDN.

darthcoder уже ответил с подробными сведениями об обработке нот \\?\C:, но теперь есть ключ реестра в HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD), который может использоваться для удаления ограничений MAX_PATH для одной системы. В статье также упоминается поддержка управления групповой политикой в ​​Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths для организации или групповой реализации, если это необходимо.

ответил JimNim 16 AMpSun, 16 Apr 2017 06:31:34 +030031Sunday 2017, 06:31:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132