Početna » kako da » Zašto je Windows izvješćivanje ove mape predugo za kopiranje?

    Zašto je Windows izvješćivanje ove mape predugo za kopiranje?

    Ako radite s Windowsom dovoljno dugo, posebno s mapama i datotekama koje imaju duga imena, naiđete na bizarnu pogrešku: Windows će izvijestiti da je putanja mape ili ime datoteke preduga da biste se premjestili na novo odredište ili čak izbrisali. U čemu je stvar?

    Hej How-To Geek!

    Tako sam neki dan reorganizirao neke datoteke na svom računalu, stvorio mape, takve stvari. Zatim, kada sam neke datoteke premjestio u mapu, dobivam poruku u kojoj se navodi da će staza mape biti predugačka. Bio sam zbunjen. Znam da svaki OS od DOS-a podržava Long Filenames, a Windows tvrdi da je staza preduga? Zašto se to događa?

    Srdačan pozdrav,

    G. Neorganiziran

    Problem u koji se upuštate je nesretno sjecište dvaju sustava koji, u ovakvim slučajevima, daju pogrešku. Da bismo točno shvatili odakle dolazi pogreška, trebamo se upoznati s poviješću dugih naziva datoteka (LFN) i načinom na koji Windows komunicira s njima prije nego što krenemo u rješenja.

    Duga imena datoteka uvedena su kroz temeljnu MS-DOS arhitekturu u sustavu Windows 95. Novi LFN sustav dopuštao je imena datoteka i direktorija do 255 znakova. Ovo je bilo dobrodošlo proširenje prethodnog sustava naziva datoteka, obično nazvanog 8.3 filenaming jer je ime bilo ograničeno na osam znakova i tri znamenke, ali također poznato kao Kratko ime datoteke (SFN). Kao što možete zamisliti, tada je još uvijek bilo mnogo aplikacija baziranih na DOS-u i bilo je više od nekoliko glavobolja koje su pokušavale dobiti novije LFN-ove i naslijeđene SFN-ove da igraju lijepo jedna s drugom. Ako ste ikada naišli na staru disketu ili CD-ROM s neobično skraćenim datotekama na njemu (kao što je abcdef ~ 1.txt), to ime datoteke bilo je izrezano pomoću neke zastarjele aplikacije koju je koristio SFN s neke dulje i nepodržane LFN (kao abcdefghijk. txt).

    Međutim, mi smo daleko od sredine 1990-ih, i cijela stvar Long Filename je (uglavnom) čvrsto izglačana. Ako koristite verziju sustava Windows od posljednjih 10 godina, vjerojatno nikada niste naišli na konflikt u duljini naziva datoteka kao što smo to ranije koristili u DOS / Windows 95 dana. Međutim, još uvijek se pojavljuju štucanje, kao što ste otkrili s projektom čišćenja diska. Ali zašto? Ako Windows 'Long Filename sustav podržava mape i nazive datoteka do 255 znakova po komponenti, u koji se zid nalazite? Ne možemo kriviti NTFS (datotečni sustav koji koristi većina modernih Windows strojeva) jer NTFS podržava spajanje mapa i naziva datoteka do ukupne duljine staze od 32.767 znakova. To daleko premašuje tipičnu strukturu direktorija koju bi većina korisnika ikada trebala.

    Gdje se sve to raspada je umjetno ograničenje Windows stacks na vrhu LFN / NTFS sustava: MAX_PATH varijabla. Varijabla MAX_PATH navodi da cjelokupna struktura direktorija u sustavu Windows ne može premašiti ukupno 260 znakova, uključujući slovo pogona, dvotočku, obrnutu kosu crtu i null povratnu pogrešku na kraju. Tako imate samo potencijalni stvarni MAX_PATH od 256 znakova, npr. C: \ svoju-256 znakova putanju \.

    Dakle, ono što se dogodilo kada ste čistili računalo jest da ste imali direktorij s već dugom stazom (bilo zato što su imena mapa bila duga, imena datoteka su duga, ili oboje), a kada ste pokušali premjestiti jedan ili više te direktorije u drugi direktorij s dugom stazom, ukupna duljina naziva puta premašila je ograničenje od 260 znakova koje je nametnula varijabla MAX_PATH.

    Sada, možda mislite: “Ah-hah! Promijenit ćemo samo varijablu MAX_PATH i riješiti problem! ”Nažalost, to nije tako jednostavno. Ne samo da je varijabla MAX_PATH bitno teško kodirana u sustav Windows, nego čak i ako ste prošli kroz ogromne poteškoće da je promijenite, na kraju biste slomili toliko da se ne bi isplatilo. Previše aplikacija očekuje da je varijabla puta ono što je Windows već dugo odredio. Ne možemo ga samo mijenjati bez stvaranja ogromnog nereda.

    Gdje vas to ostavlja? Pa, najjednostavnije rješenje je da jednostavno uredite podatke o putanji. Na primjer, ako imate tonu spremljenih članaka u kojima je aplikacija / proširenje koje ste koristili za spremanje s weba izradili direktorij koji je bio puni naslov članka + naslov članka, a sam naziv datoteke je puni naslov članka + vodi članak, bilo bi stvarno jednostavno pogoditi ili premašiti MAX_PATH jednim spremanjem. Uređivanje tih golemih naslova mapa i članaka na razumniju veličinu jednostavan je način rješavanja problema.

    Ako imate veliki broj datoteka s dugom stazom i ne želite ih sve uređivati ​​(ili ako želite izbrisati tona starih direktorija koji su predugi za Windows s kojima se suočava kada je ograničena varijablom MAX_PATH), tu je rad s komandnom linijom. Iako je Windows ograničen s varijablom MAX_PATH, inženjeri sustava Windows shvatili su da će postojati situacije u kojima će se korisnici morati baviti dužim imenima putova. Kao takav, Windows API ima funkciju za rješavanje ekstremno dugih putova.

    Da biste iskoristili taj API i koristili alate naredbenog retka na nezgrapnim imenicima / imenima datoteka, jednostavno trebate dodati naziv direktorija s nekoliko dodatnih znakova. Na primjer, ako ste imali veliku strukturu direktorija koju ste htjeli izbrisati (ali ste primili pogrešku zbog duljine puta kada ste je pokušali), možete promijeniti naredbu iz:

    rmdir c: dokumenti-stvarno-super-dugo-mapa-ime-shema \ t

    do:

    c-dokumenti-stvarno-super-dugo-mapa-ime-shema \ t

    Ključ je dodatak \\? \ dio prije početka puta datoteke; to upućuje Windows da zanemari ograničenja koja nameće varijabla MAX_PATH i da stupi u interakciju s putom koji ste upravo isporučili kao isporučeni / shvaćeni izravno od strane sustava osnovnih datoteka (što jasno može podržati duži put). Kao i uvijek, budite oprezni u naredbenom retku kako biste izbjegli slučajno brisanje datoteka ili direktorija koje ste namjeravali ostaviti netaknutim.

    Ako je naš pregled ovog problema znatiželjan, svakako se upišite u ovaj članak iz biblioteke programa Microsoft Developer Network, imenovanja datoteka, staza i prostora imena, za više informacija o tome što se događa na poklopcu.


    Imate hitno tehnološko pitanje? Snimite nam e-poštu na [email protected] i mi ćemo dati sve od sebe da na nju odgovorimo.