22Aug
Če delate z operacijskim sistemom Windows dovolj dolgo, še posebej z mapami in datotekami z dolgimi imeni, boste naleteli na bizarno napako: Windows bo poročal, da je pot do mape ali ime datoteke predolga, da se premaknete na nov cilj ali celo izbrišete. Kakšen je dogovor?
Hej, kako naj Geek!
Torej prejšnji dan sem reorganiziral nekaj datotek na svojem računalniku, ustvaril mape, takšne stvari. Potem, ko sem nekaj datotek premaknil v mapo, prejmem sporočilo, ki pravi, da bo pot do določene poti predolga. Bil sem zmeden. Vem, da vsak OS, saj DOS podpira dolga imena datotek, vendar Windows trdi, da je pot predolga? Zakaj se to zgodi?
S spoštovanjem,
G. Disorganized
Problem, s katerim se srečujete, je nesrečen presečišče dveh sistemov, ki v takšnih primerih prinašajo napako. Da bi natančno razumeli, od kod prihaja napaka, se moramo kopati v zgodovino Long Filenames( LFN) in kako Windows interagira z njimi, preden se lotimo rešitev.
Long imena datotek so bile uvedene z osnovno arhitekturo MS-DOS v operacijskem sistemu Windows 95. Novi sistem LFN je omogočil imena datotek in imenikov do 255 znakov. To je bila dobrodošla širitev prejšnjega sistema imen datotek, ki se običajno imenuje 8,3 filenamingu, ker je bilo ime omejeno na osem znakov in trimestno razširitev, temveč tudi pod imenom Short Filename( SFN).Kot si lahko predstavljate, je bilo še vedno veliko aplikacij, ki temeljijo na DOS-u, in več kot nekaj glavobolov je poskušalo pridobiti novejše LFN-je in starejše SFN-je, da bi se med seboj dobro igrali.Če ste kdaj naleteli na starejšo disketo ali CD-ROM z nenavadno okrnjenimi datotekami na njem( kot abcdef ~ 1.txt), je bilo to ime datoteke izrezano z nekaj starejših aplikacij, ki uporabljajo SFN, iz nekaj večjega in nepodprtega LFN-ja( npr. Abcdefghijk.txt).
Dolgo pot smo imeli od sredine devetdesetih let prejšnjega stoletja pa je celotna stvar z dolgim imenom( večinoma) trdno izsušena.Če uporabljate različico operacijskega sistema Windows iz zadnjih 10 let, verjetno nikoli ne naletite na konflikte glede dolžine filename, kot smo jih včasih uporabljali v DOS / Windows 95 dneh. To je dejal, še vedno naletimo na kolcanje, kot ste odkrili s projektom čiščenja diska. Ampak zakaj?Če sistem Windows Long Filename podpira mape in imena datotek z največ 255 znaki na komponento, na katero steno naletite? Ne moremo kriviti NTFS( datotečni sistem, ki ga uporablja velika večina sodobnih strojev Windows), saj bo NTFS podpiral veriženje map in imen datotek do skupne dolžine poti 32.767 znakov. To daleč presega tipično strukturo imenikov, ki bi jo večina uporabnikov potrebovala.
Kadar je vse razdvojeno, je umetna omejitev, ki jo Windows stoji na vrhu sistema LFN / NTFS: spremenljivka MAX_PATH.Spremenljivka MAX_PATH določa, da celotna struktura imenikov v operacijskem sistemu Windows ne sme presegati 260 znakov, vključno s črko pogona, dvopičjem, poševno črko in nič na koncu. Tako imate samo potencialno resnično MAX_PATH 256 znakov, npr. C: \ Vaša-256-znak-pot \ .
Torej, kaj se je zgodilo, ko ste očistili računalnik, je, da imate imenik z že dolgo potjo( bodisi zato, ker so bila imena mape dolga, imena datotek so bila dolga ali oba) in ko ste poskušali premakniti enega ali večteh imenikov v drug direktorij z dolgim potjo, skupna dolžina imena poti presega omejitev 260 znakov, ki jo je določila spremenljivka MAX_PATH.
Zdaj lahko misliš "Ah-hah! Samo spremenili bomo spremenljivko MAX_PATH in rešili problem! "Žal, to ni tako preprosto. Ne samo, da je spremenljivka MAX_PATH v bistvu težko kodirana v operacijskem sistemu Windows, temveč tudi, če bi šli skozi ogromno težav, da bi jo spremenili, bi se na koncu zlomil toliko, da to ne bi bilo vredno. Preveč aplikacij pričakuje, da bo spremenljivka poti določena, kot je Windows določil. Ne moremo samo spremeniti, ne da bi ustvarili ogromno nered.
Kje vas to zapusti? No, najpreprostejša rešitev je samo urediti podatke o poti. Na primer, če imate tono shranjenih člankov, v katerih je aplikacija / razširitev, ki ste jo uporabili za shranjevanje iz spleta, ustvarili imenik, ki je bil polni naslov članka + članskega vodnika, nato pa je samo ime datoteke polni naslovčlanka + članskega vodnika, bi bilo res enostavno zadeti ali preseči MAX_PATH z enim samim shranjevanjem. Urejanje teh ogromnih map in naslovov člankov do bolj razumne velikosti je preprost način, kako odpraviti težavo.
Če imate veliko število datotek z dolgimi potmi in jih ne želite vse urediti( ali če želite, da izbriše tone starih imenikov, ki so predolgi za operacijski sistem Windows, Spremenljivka MAX_PATH), obstaja naloga v ukazni vrstici.Čeprav je Windows omejen s spremenljivko MAX_PATH, so inženirji sistema Windows spoznali, da bi bile razmere, v katerih bi uporabniki morali imeti daljša imena poti. Kot tak, ima API za Windows funkcijo za reševanje izjemno dolgih poti.
Da bi izkoristili ta API in uporabili orodja ukazne vrstice v vaših grozdnih imenikih / datotekah, morate preprosto dodati ime imenika z nekaj dodatnimi znaki.Če ste na primer imeli veliko strukturo imenikov, ki ste jo želeli izbrisati( vendar ste prejeli napako zaradi dolžine poti, ko ste jo poskusili), lahko spremenite ukaz iz:
rmdir c: \ documents \ some-really-super-dong-map-name-scheme \
na:
rmdir \\? \ c: \ documents \ nekako res-super-long-folder-name-scheme \
Ključ je dodatek \\?pred začetkom poti datoteke;to ukazuje Windowsu, da ne upošteva omejitev, ki jih je določila spremenljivka MAX_PATH, in da bi se lahko povezali s potjo, ki ste jo pravkar dobila, kot je dobavil / razumel neposredno iz osnovnega sistema datotek( ki lahko očitno podpira daljšo pot).Kot vedno, bodite previdni v ukaznem pozivu, da preprečite nenamerno brisanje datotek ali imenikov, ki ste jih nameravali zapustiti nedotaknjeno.
Če vam je naš pregled nad to težavo zanimiv, zagotovo preberite ta članek iz knjižnice programa Microsoft Developer Network, imenovanje datotek, poti in imenskih prostorov, če želite več informacij o tem, kaj se dogaja pod pokrovom.
Imate pereče tehnično vprašanje? Shranite nas na naslov [email protected] in se potrudili, da odgovorimo.