22Aug

Miks on Windowsi aruandlus selle kausta kopeerimiseks liiga pikk?

Kui teete Windowsiga piisavalt pikka aega, eriti pikkade nimede jaoks kaustade ja failidega, tekib oivaline viga: Windows teatab, et kausta tee või faili nimi on liiga pikk, et liikuda uue sihtkohta või isegi kustutada. Mis on asi?

Hei, kuidas mängida!

Nii et järgmisel päeval reorganiseeriti mõned failid minu arvutisse, luues kaustu, selliseid asju. Siis, kui ma liikusin mõne faili kausta, saadan sõnumi, märkides, et sellest tulenev kausta tee on liiga pikk. Ma olin segaduses. Ma tean, et iga OS kuna DOS toetab pikki failinimesid, kuid Windows väidab, et see tee on liiga pikk? Miks see juhtub?

Sincerly,

Hr Disorganized

Probleem, millega te kasutate, on kahe süsteemi kahetsusväärne ristmik, mis sellistel juhtudel annab viga. Selleks, et täpselt teada saada, kus tõrge ilmneb, peame minema pikkade failinimede( LFN) ajalooga ja kuidas Windowsiga nendega suhtlemine enne lahenduste leidmist.

pikad failinimed võeti kasutusele Windows 95 põhiosas MS-DOS-i arhitektuuriga. Uus LFN-süsteem lubas failide ja katalooginimede puhul kuni 255 tähemärki. See oli eelmise failinimesüsteemi tervitatav laiendamine, mida tavaliselt nimetatakse 8.3 filenameerimiseks, kuna nimeks oli vaid kaheksa märki ja kolmekohaline laiendus, kuid tuntud ka kui lühike failinimi( SFN).Nagu võite ette kujutada, oli sellel ajal veel palju DOS-põhiseid rakendusi ja seal oli rohkem kui paar peavalu, üritades saada uuemad LFN-id ja pärandfirmad SFN-idel üksteisega toredaks mängimiseks. Kui olete kunagi varem näinud mõnda vanemat kettale või CD-le, millel on imelikult kärbitud faile( näiteks abcdef ~ 1.txt), mõne SFN-i kasutava pärandprogrammi abil mõne pikema ja toetamata LFN-i( näiteks abcdefghijk) abil selle failinimi.txt).

Me oleme pikka tee 1990. aastate keskpaigast, kuid kogu Long Filename asi( enamasti) on kindlalt eemaldatud. Kui olete viimase kümne aasta jooksul Windowsi versiooni kasutanud, pole tõenäoliselt kunagi kogenud failinime pikkuse konflikti, nagu me kasutasime DOS / Windows 95 päeva jooksul tagasi. Sellest hoolimata sattusime end ikka veel luksumine, nagu avastasite oma kettade puhastamise projekti. Aga miks? Kui Windowsi pikk filename süsteem toetab kaustu ja faili nimesid kuni 255 tähemärki ühe komponendi kohta, siis millist seinot sa kasutad? Me ei saa süüdistada NTFS-i( failisüsteemi, mida enamus kaasaegseid Windowsi masinaid kasutab), sest NTFS toetab kaustade ja failinimede sidumist kokku kuni 32 767 tähemärki. See ületab kaugelt tüüpilise kataloogikorralduse, mida enamik kasutajaid kunagi vaja peaks.

Kui see kõik laguneb, on LFN / NTFS-süsteemi ülaosas kunstlik piirang Windowsi korstnad: muutuja MAX_PATH.Muutuja MAX_PATH määrab kindlaks, et Windowsi täielik kataloogistruktuur ei tohi olla üle 260 tähemärki, kaasa arvatud draivitäht, käärsool, tagaklaasilangus ja lõpuks tühine tagasilangus. Seega on potentsiaalset MAX_PATH potentsiaalist ainult 256 tähemärki, nt C: \ your-256-character path \ .

Nii, mis juhtus arvuti puhastamisel, on see, et teil oli juba pikk tee( kas ka siis, kui kaustade nimed olid pikad, failinimed olnud pikad või mõlemad) ning kui üritasite ühe või mitunendest kataloogidest teise pika tee juurde kuuluva kataloogi, ületas tee nime kogupikkus muutuja MAX_PATH määratud 260 tähemärgi piiri.

Nüüd võite mõelda "Ah-hah! Me lihtsalt muudame muutuja MAX_PATH ja lahendame probleemi! "Alas, see pole nii lihtne. Muutuja MAX_PATH ei ole mitte ainult Windowsis põhjalikult kodeeritud, vaid isegi siis, kui olete läbi selle tohutu probleemi muutnud, võite lõpuks rikkuda nii palju, et see pole seda väärt. Liiga palju rakendusi eeldavad, et tee muutuja on see, mida Windows on juba pikka aega määranud. Me ei saa lihtsalt ümber minna, ilma et tekiks tohutut segadust.

Kust see sulle jätab? Nüüd on lihtsaim lahendus teeandmete redigeerimine. Näiteks kui teil on salvestatud artiklit tonni kohta, kus teie veebis salvestatud rakendus / laiendus loonud kataloogi, mis oli artikli täispealkiri + artiklit, siis on faili nimi ise täielik pealkiriartikli + artiklist, oleks tõesti lihtne koputada või ületada MAX_PATH ühe salvestusega. Selle tohutu kausta- ja artiklite pealkirjade muutmine mõistlikumaks muutmiseks on lihtne probleemi lahendamiseks.

Kui teil on suur pika teega failide arv ja te ei soovi neid kõiki redigeerida( või kui soovite -d, siis kustutage tonni vanu katalooge, mis on Windowsi jaoks liiga pikad, et neid piirataMAX_PATH muutuja), on käsurea töö ümber. Isegi kui muutuja MAX_PATH piirab Windowsi, on Windowsi insenerid aru saanud, et oleksid olukorrad, kus kasutajad peaksid tegelema pikemate tee nimedega. Sellisena on Windows API-l funktsioon äärmiselt pikkade teede käsitlemiseks.

Selle API kasutamise eeliseks ja käsurea tööriistade kasutamiseks oma koormatud kaustades / failinimedes peate lihtsalt lisama katalooginime mõne lisatähega. Näiteks kui teil oli tohutu kataloogistruktuur, mida soovite kustutada( aga saatsite selle läbimise ajal teekonna pikkuse tõttu vea), võite käsku muuta järgmiselt:

rmdir c: \ docs \ some-really-super-long-folder-name-scheme \

aadressile:

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

Võtmeks on \\? \ partenne faili asukoha algust;see juhib Windowsit, et ignoreeriks MAX_PATHi muutuja poolt kehtestatud piiranguid ja suhelda just pakutava teega, mida pakkus / mõistis otseselt baasfailide süsteem( mis võib selgelt pikemat teed toetada).Nagu alati, käituge ettevaatlikult käsureale, et vältida failide või kataloogide juhusliku kustutamist, mida kavatsesite puutumata jätta.

Kui meie ülevaade sellest teema kohta on teile huvi, kindlasti kaevake see artikkel Microsofti arendajavõrgustiku teeki "Failide nimestimine", "Paths" ja "Namespaces", et saada rohkem teavet selle kohta, mis toimub kapoti all.

Kas teil on aktuaalne tehniline küsimus? Võta meile email at [email protected] ja me teeme kõik selleks, et sellele vastata.