Защо Windows докладването на тази папка е твърде дълго за копиране?



Ако работите с Windows достатъчно дълго, особено с папки и файлове с дълги имена, ще срещнете странна грешка: Windows ще съобщи, че пътят на папката или името на файла е твърде дълъг, за да се премести на нова дестинация или дори да се изтрие. каква е сделката?

Хей, как да маниак!





И така онзи ден реорганизирах някои файлове на моя компютър, създавах папки и подобни неща. След това, когато преместих някои файлове в папка, получавам съобщение, в което се посочва, че полученият път към папката ще бъде твърде дълъг. Бях объркан. Знам, че всяка една ОС след DOS поддържа дълги имена на файлове, но Windows твърди, че пътят е твърде дълъг? Защо се случва това?

С уважение,



Г-н Дезорганизиран

Проблемът, с който се сблъсквате, е злощастно пресичане на две системи, което в случаи като този води до грешка. За да разберем точно откъде идва грешката, трябва да се поразровим в историята на дългите файлови имена (LFN) и как Windows взаимодейства с тях, преди да се задълбочим в решенията.

Дългите имена на файлове бяха въведени чрез основната архитектура на MS-DOS в Windows 95. Новата LFN система позволява имена на файлове и директории до 255 знака. Това беше добре дошло разширение на предишната файлова система с имена, обикновено наричана 8.3 именуване на файлове тъй като името беше ограничено до осем знака и трицифрено разширение, но също така известно като кратко име на файл (SFN). Както можете да си представите, тогава все още имаше много DOS-базирани приложения и имаше повече от няколко главоболия, които се опитваха да накарат по-новите LFN и наследените SFN да играят добре един с друг. Ако някога сте попадали на по-стара дискета или CD-ROM със странно съкратени файлове на него (като abcdef~1.txt), името на този файл е изрязано от някакво наследено приложение, използващо SFN, от някакъв по-дълъг и неподдържан LFN (като abcdefghijk. текст).

Ние обаче сме далеч от средата на 90-те години и цялото нещо с дългото име на файл е (в по-голямата си част) здраво изгладено. Ако използвате версия на Windows от последните 10 години, вероятно никога дори не сте се сблъсквали с конфликт на дължината на името на файла, какъвто сме срещали в DOS/Windows 95 дни. Въпреки това все още се сблъскваме с хълцания, както открихте с вашия проект за почистване на диска. Но защо? Ако системата с дълги файлови имена на Windows поддържа папки и имена на файлове с до 255 знака на компонент, в каква стена се сблъсквате? Не можем да обвиняваме NTFS (файловата система, която използват по-голямата част от съвременните машини с Windows), тъй като NTFS ще поддържа верига от папки и имена на файлове с обща дължина на пътя от 32 767 знака. Това далеч надхвърля типичната структура на директории, от която повечето потребители някога ще се нуждаят.

Там, където всичко се разпада, е изкуствено ограничение, което Windows стекове върху LFN/NTFS системата: променливата MAX_PATH. Променливата MAX_PATH указва, че пълната структура на директорията в Windows не може да надвишава общо 260 знака, включително буквата на устройството, двоеточие, обратна наклонена черта и нулева обратна връзка в края. По този начин имате само потенциален реален MAX_PATH от 256 знака, напр. C:your-256-character-path .

Реклама

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

Сега може би си мислите А-ха! Просто ще променим променливата MAX_PATH и ще решим проблема! Уви, не е толкова просто. Не само, че променливата MAX_PATH по същество е твърдо кодирана в Windows, но дори и да сте преминали през огромната мъка да я промените, в крайна сметка ще разбиете толкова много, че няма да си струва. Твърде много приложения очакват променливата на пътя да бъде това, което Windows отдавна е определил да бъде. Не можем просто да го променяме, без да създаваме огромна бъркотия.

Къде те оставя това? Е, най-простото решение е просто да редактирате данните за пътя. Например, ако имате много запазени статии, където приложението/разширението, което сте използвали, за да ги запазите от мрежата, създаде директория, която е пълното заглавие на статията + водещата статия на статията, а след това самото име на файла е пълното заглавие на статията + водещата страница на статията, би било наистина лесно да достигнете или надхвърлите MAX_PATH с едно запазване. Редактирането на тези огромни заглавия на папки и статии до по-разумен размер е лесен начин за отстраняване на проблема.

Ако имате огромен брой файлове с дълъг път и не искате да ги редактирате всички (или ако искате да Изтрий много стари директории, които са твърде дълги, за да може Windows да се справи, когато са ограничени от променливата MAX_PATH), има работа от командния ред. Въпреки че Windows е ограничен от променливата MAX_PATH, инженерите на Windows осъзнаха, че ще има ситуации, при които потребителите ще трябва да се справят с по-дълги имена на пътеки. Като такъв, Windows API има функция за работа с изключително дълги пътища.

За да се възползвате от този API и да използвате инструменти на командния ред за вашите тромави имена на папки/файлове, просто трябва да добавите името на директорията с няколко допълнителни знака. Например, ако сте имали огромна структура на директорията, която сте искали да изтриете (но сте получили грешка поради дължината на пътя, когато сте го опитали), можете да промените командата от:

rmdir c:documentssome-really-super-long-folder-name-scheme

да се:

rmdir \?c:documentssome-really-super-long-folder-name-scheme

Ключът е добавянето на |_+_| част преди началото на пътя на файла; това инструктира Windows да пренебрегне ограниченията, наложени от променливата MAX_PATH, и да взаимодейства с пътя, който току-що сте предоставили, като предоставен/разбран директно от основната файлова система (която очевидно може да поддържа по-дълъг път). Както винаги, бъдете внимателни в командния ред, за да избегнете случайно изтриване на файлове или директории, които сте възнамерявали да оставите непокътнати.

Реклама

Ако нашият преглед на този проблем ви е любопитен, определено се потопете в тази статия от Библиотека на Microsoft Developer Network, именуване на файлове, пътища и пространства от имена , за повече информация какво се случва под капака.


Имате належащ технически въпрос? Изпратете ни имейл на ask@howtogeek.com и ние ще направим всичко възможно да отговорим.

ПРОЧЕТЕТЕ СЛЕДВАЩО Снимка на профила на Джейсън Фицпатрик Джейсън Фицпатрик
Джейсън Фицпатрик е главен редактор на LifeSavvy, сестринския сайт на How-To Geek, фокусиран върху лайфхакове, съвети и трикове. Той има над десетилетие опит в публикуването и е автор на хиляди статии в Review Geek, How-To Geek и Lifehacker. Джейсън служи като уикенд редактор на Lifehacker, преди да се присъедини към How-To Geek.
Прочетете пълната биография

Интересни Статии