Назад | Перейти на главную страницу

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

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

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

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

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

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

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 символов или около того, поэтому вы больше не столкнетесь с проблемой «Имя файла слишком длинное».

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

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

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

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

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath

Теперь у 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 при необходимости для реализации в масштабах организации или группы.