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

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

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

    Хей, как-да Geek!

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

    Sincerly,

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

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

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

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

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

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

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

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

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

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

    rmdir c: документи, които са наистина-супер-дълга папка-име-схема \ t

    да се:

    c: документи, някои-наистина-супер-дълги папки-име-схема \ t

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

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


    Имате въпрос за технология? Застреляйте ни имейл на [email protected] и ние ще направим всичко възможно да му отговорим.