If-Koubou

Zašto je ovo mapa prevelika za kopiranje?

Zašto je ovo mapa prevelika za kopiranje? (Kako da)

Ako radite s Windowsom dovoljno dugo, naročito s mapama i datotekama s dugim imenima, pokrenut ćete bizarnu pogrešku: Windows će prijaviti da je put mape ili naziv datoteke predug za premještanje na novo odredište ili čak izbrisati. Kakav je posao?

Hej Kako-To Geek!

Drugog dana, reorganizirala sam neke datoteke na mom računalu, stvarajući mape, takve stvari. Zatim, kad sam premjestio neke datoteke u mapu, dobivam poruku, navodeći da će prolazna mapa putanja biti preduga. Bio sam zbunjen. Znam da svaki pojedini OS od DOS podržava Long Filenames, ali Windows tvrdi da je put predug. Zašto se to dogodi?

Srdačan pozdrav,

Gospodin Disorganized

Problem u kojem se nalazite je nesretno raskrižje dvaju sustava koji u takvim slučajevima donose pogrešku. Da bismo shvatili točno odakle dolazi pogreška, moramo utvrditi povijest Long Filenames (LFN) i kako Windows komunicira s njima prije nego što probamo rješenja.

Long Filenames su uvedeni kroz temeljnu MS-DOS arhitekturu u sustavu Windows 95. Novi LFN sustav omogućio je nazive datoteka i direktorija do 255 znakova. Ovo je bilo dobrodošlo proširenje prethodnog sustava naziva datoteke, obično pod nazivom 8.3 filenaming jer je ime ograničeno na osam znakova i tri znamenke proširenja, ali također poznat kao kratki naziv datoteke (SFN). Kao što možete zamisliti, još uvijek je bilo mnogo DOS-ovih aplikacija, a bilo je više od nekoliko glavobolja koje pokušavaju dobiti novije LFN-ove i naslijeđene SFN-ove da se igraju lijepo jedno s drugim. Ako ste ikad naišli na stariju disketi ili CD-ROM s neobično skraćenim datotekama na njemu (kao što je abcdef ~ 1.txt) taj je naziv datoteke smanjen nekim SFN-ovim naslijeđenom aplikacijom s nekog duljeg i nepodržanog LFN-a (kao što je abcdefghijk. tXT).

Međutim, dugo smo od sredine 1990-ih, a cijeli je Long Filename (uglavnom) čvrsto uklonjen. Ako imate verziju sustava Windows u posljednjih 10 godina, vjerojatno nikad niste nailazili na sukob duljine datoteke kao što smo se nekad koristili za DOS / Windows 95 dana. To je rekao, još uvijek naletimo na štucanje, kao što ste otkrili sa svojim disk čišćenje projekta. Ali zašto? Ako sustav Long filename sustava Windows podržava mape i nazive datoteka do 255 znakova po komponentama, u kojem se zidu prikazujete? Ne možemo kriviti NTFS (datotečni sustav koji koristi velika većina modernih Windows računala) jer NTFS podržava povezivanje mapa i imena datoteka do ukupne duljine puta od 32.767 znakova. To je daleko veće od tipične strukture direktorija koju bi većina korisnika ikada trebala.

Gdje se sve raspada, to je umjetno ograničenje Windows stack na vrhu sustava LFN / NTFS: MAX_PATH varijabla. Varijabla MAX_PATH određuje da kompletna struktura direktorija u sustavu Windows ne smije prelaziti 260 ukupnih znakova, uključujući slovo pogona, dvotočka, obrnuto i nulte prijetnje na kraju. Tako imate samo potencijalni pravi MAX_PATH od 256 znakova, npr. C: \ svoju-256 znakova putanju \.

Dakle, ono što se dogodilo prilikom čišćenja vašeg računala jest da ste imali direktorij s već dugom stazom (bilo zato što su nazivi mapa bili dugački, nazivi datoteka bili su dugački ili oboje) i kada ste pokušali premjestiti jedan ili više one direktorije u drugi direktorij s dugim putom, ukupna duljina naziva staze premašila je ograničenje od 260 znakova koje nameće MAX_PATH varijabla.

Sada, možda mislite "Ah-hah! Promijenit ćemo promjenu MAX_PATH i riješiti problem! "" Jao, to nije tako jednostavno. Ne samo da je varijabla MAX_PATH uglavnom teško kodirana u sustavu Windows, ali čak i ako ste prošli kroz ogromnu gnjavažu za mijenjanjem, završili ste razbijanje toliko da to ne bi bilo vrijedno. Previše aplikacija očekuje da će varijabla staze biti ono što je Windows to dugo odredio. Ne možemo se samo mijenjati bez stvaranja ogromne zbrke.

Gdje te ostaviti? Pa, najjednostavnije rješenje je samo uređivanje podataka o putovanju. Na primjer, ako imate ton spremljenih članaka u kojima je aplikacija / proširenje koje ste koristili za spremanje s weba stvorio direktorij koji je bio puni naslov članka + vodstvo članka, a sam naziv datoteke je puni naslov članak + članak, bilo bi vrlo lako pogoditi ili prijeći MAX_PATH s jednom spremom. Uređivanje tih ogromnih naslova mapa i članaka do više razumne veličine jednostavan je način rješavanja problema.

Ako imate ogroman broj datoteka s dugim putom i ne želite ih uređivati ​​sve (ili ako želiteizbrisati tonu starih direktorija koji su predugo za Windows da se bave kada je ograničena varijablom MAX_PATH), radi se o naredbenom retku. Iako Windows ograničava varijabla MAX_PATH, inženjeri sustava Windows shvatili su da će postojati situacije u kojima će se korisnici morati nositi s duljim nazivima putanja. Kao takav, Windows API ima funkciju za rješavanje ekstremno dugih staza.

Da biste iskoristili taj API i upotrebljavali alate naredbenog retka na svojim nezgrapnim nazivima mapa / datoteka, jednostavno trebate dodati naziv direktorija s nekoliko dodatnih znakova. Na primjer, ako ste imali ogromnu strukturu direktorija koju ste željeli izbrisati (ali ste dobili pogrešku zbog dužine puta kada ste ga pokušali), možete promijeniti naredbu iz:

rmdir c: \ documents \ neki-doista-super-dugo-folder-name-scheme \

do:

rmdir \? \ c: \ documents \ neki-stvarno-super-dugo-folder-name-scheme \

Ključ je dodatak \\?\ dio prije početka puta datoteke; to upućuje Windowsu da zanemaruje ograničenja koja nameću varijabla MAX_PATH i interakciju s putom koji ste upravo dobili kao što je isporučen / shvaćen izravno od osnovnog sustava datoteka (što može jasno podržati duži put). Kao i uvijek, pazite na naredbeni redak kako biste izbjegli slučajno brisanje datoteka ili direktorija koje ste namjeravali ostaviti netaknutima.

Ako ste naš pogled na ovaj problem znatiželjni, svakako pročitajte ovaj članak iz knjižnice Microsoftove razvojne mreže, naziva datoteke, putove i prostore za imena za više informacija o tome što se događa ispod nape.

Imate li pritiskom tehničko pitanje? Pucaj nam e-mail na adresu [email protected] i mi ćemo se potruditi da odgovorimo.