Подолання максимальних обмежень довжини файлу в Windows


36

Один із наших клієнтів звично використовує дуже довгі імена шляху (кілька вкладених папок із довгими іменами), і ми регулярно стикаємося з "проблемами освіти користувачів", щоб скоротити шлях до менш ніж 260 символів.

Чи є в наявності технічне рішення, чи можемо ми натиснути якийсь перемикач у Windows 7 та Windows 2008 R2, щоб сказати «так, просто ігноруйте ці історичні проблеми та змушуйте +260 ім'я символу працювати».

PS Я прочитав і був абсолютно невідрізним, називаючи файли, шляхи та простори імен


3
Ось ми у 2018 році, і проблема все ще існує в РОБОКОПІЇ. 255 межа. Ті, що перевищують його, просто подають звуковий сигнал, але не копіюють.
SDsolar

@SDsolar: ви використовуєте стару версію роботокопії?
Найкровек

Так, збирався сказати те саме - треба користуватися роботопією спеціально, тому що вона може обробляти довгі шляхи ...
Роб Ніколсон

Відповіді:


12

Методи існують, але, поки Microsoft не перекодирує віджет файлового браузера, ми в значній мірі застрягли зі старою проблемою. Це неоптимально, але саме так воно працює.


5
Помилка в програмному забезпеченні MS, яке не було виправлено протягом кількох версій ОС, це новий ...
Hubert Kario

2
Нарешті, Windows 10 1607 вирішила
HackSlash

28

Тільки згадуючи про трюк, якого я ще не бачу тут згадати.

Візьмемо, наприклад, цей файл:

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 Explorer) та більшість утиліт командного рядка, ймовірно, не дозволять вам торкатися її.

Використовуйте 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 (або "широкої") функцій API Windows, а також встановивши префікс шляху \\?\.

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


9
Я використовував подібний підхід subst, використовуючи з'єднання каталогів, що може бути зручніше для очищення, якщо ви просто хочете зробити кілька швидких змін. Я використовую Link Shell Extension , але ви можете просто використовувати mklinkкоманду в такий спосіб: mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow".
Чарльз Грюнвальд,

10

Ви можете обійти це обмеження, використовуючи позначення \\? \ C:. Це некрасиво, але він підтримує довжину файлів до 2 ^ 15.

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


2
Так, я прочитав це, як я вже сказав (див. Моє посилання). Але як я точно від цього отримую користь? Чи можу я зіставити диск, наприклад, \\? \ Я не розумію. Стаття призначена для програмістів, що використовують API API. Хоча я кодую в .NET, оскільки виникає потреба, я не використовую C ++ тощо, і не можу зрозуміти, як це стосується мого клієнта, який використовує провідник Windows та загальний діалог файлів тощо.
Крістофер Едвардс

1
Зрештою, його немає. : - / Сумно.
Кріс К

@ChristopherEdwards Ви можете створити стики до точок нижче в ієрархії папок.
Хуберт Каріо

1
@ChristopherEdwards ви можете зробити посилання c:\usr-dataна `c: \ Users \ VeryLongUserName \ LongFolderName` і сказати йому використовувати колишню, але якщо він регулярно називає папки в 40-ти символах, то це не допоможе ...
Hubert Kario

2
7-zip із задоволенням перегляне та скопіюватиме в \\? \ C: нотації, для чого це варто.
Метт Лайонс

9

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за груповою політикою для організації або впровадження в цілому для групи.


У мене не було часу на ретельне тестування, але я до цього часу бачив змішані результати з цим рішенням, і не можу підтвердити, що це вирішує проблему для Windows [file] Explorer.
JimNim

2
Це не працює у Провіднику файлів, оскільки, хоча система та NTFS можуть обробляти довгі шляхи, Провідник не може, поки сам не буде перекодований.
ingyhere

PS, вам потрібно буде скористатися однією з програм копіювання в цьому посиланні SO на вершині Провідника, щоб фактично змусити його працювати.
ingyhere

1
Гарна інформація! Я, мабуть, просто дотримуюся роботокопії в такому випадку.
JimNim
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.