Prečo je hlásenie systému Windows túto zložku príliš dlho na kopírovanie?
Ak pracujete s Windows dostatočne dlho, hlavne pri priečinkoch a súboroch s dlhými názvami, narazíte na bizarnú chybu: systém Windows oznámi, že cesta k súboru alebo názov súboru je príliš dlhá, aby sa presunul na nový cieľ alebo dokonca odstrániť. Aká je dohoda?
Hej How-To Geek!
Takže druhý deň som reorganizoval niektoré súbory na svojom počítači, vytváral som priečinky, takéto veci. Potom, keď som presunul nejaké súbory do priečinka, dostanem správu, v ktorej sa uvádza, že výsledná cesta k priečinku bude príliš dlhá. Bol som zmätený. Viem, že každý OS od DOS podporuje Long Filenames, ale Windows tvrdí, že cesta je príliš dlhá? Prečo sa to stane?
sincerly,
Pán dezorganizovaný
Problém, s ktorým narazíte, je nešťastným prienikom dvoch systémov, ktoré v takýchto prípadoch spôsobujú chybu. Aby sme presne pochopili, odkiaľ pochádza chyba, musíme sa zaoberať históriou dlhých názvov súborov (LFN) a tým, ako s nimi pracuje systém Windows, skôr než sa ponoríme do riešení.
Dlhé názvy súborov boli zavedené prostredníctvom základnej architektúry MS-DOS v systéme Windows 95. Nový systém LFN umožnil mená súborov a adresárov až do 255 znakov. Bola to vítaná expanzia predchádzajúceho systému názvov súborov, zvyčajne nazývaného 8.3 názvov súborov, pretože názov bol obmedzený na osem znakov a trojmiestne rozšírenie, ale tiež známe ako Short Filename (SFN). Ako si viete predstaviť, vtedy bolo stále veľa aplikácií založených na DOS a bolo viac ako niekoľko bolesti hlavy, ktoré sa snažili dostať novšie LFN a staršie SFN, aby si navzájom dobre zahrali. Ak ste niekedy narazili na staršiu disketu alebo CD-ROM s podivne skrátenými súbormi (podobne ako abcdef ~ 1.txt), tento názov súboru bol vyrezať niektoré SFN-používajúce staršie aplikácie od dlhšie a nepodporované LFN (ako abcdefghijk. TXT).
Sme ďaleko od polovice deväťdesiatych rokov minulého storočia a celá vec dlhého súboru je (z väčšej časti) pevne vyrezaná. Ak používate verziu systému Windows za posledných 10 rokov, pravdepodobne sa nikdy nedarí naraziť na konflikt dĺžky názvu súboru, aký sme používali na spúšťanie sa v dňoch DOS / Windows 95. Znamená to, že stále sme narazili na škytavku, ako ste zistili s projektom vyčistenia disku. Ale prečo? Ak systém Windows Long Filename podporuje priečinky a názvy súborov až do 255 znakov na jednu súčasť, na akú stenu ste narazili? Nemôžeme obviňovať systém súborov NTFS (systém súborov, ktorý používa drvivá väčšina moderných počítačov so systémom Windows), pretože NTFS bude podporovať reťazenie priečinkov a názvov súborov až po celkovú dĺžku cesty 32 767 znakov. To ďaleko prekračuje typickú štruktúru adresárov, ktorú by väčšina používateľov potrebovala.
Kde sa všetko rozpadá, je to umelé obmedzenie Windows stohy na vrchole systému LFN / NTFS: premenná MAX_PATH. Premenná MAX_PATH určuje, že úplná štruktúra priečinkov v systéme Windows nesmie prekročiť celkový počet 260 znakov, vrátane písmena jednotky, dvojbodky, spätného lomka a nulového odporu na konci. Preto máte len potenciálny skutočný MAX_PATH 256 znakov, napr. C: \ napíšte-256-charakter-cesta \.
Takže, čo sa stalo, keď ste čistili počítač, je, že máte adresár s už dlhou cestou (buď preto, že názvy priečinkov boli dlhé, názvy súborov boli dlhé, alebo oboje) a keď ste sa pokúsili presunúť jeden alebo viac tieto adresáre do iného adresára s dlhou cestou celková dĺžka názvu cesty prekročila limit 260 znakov uložený premennou MAX_PATH.
Teraz môžete premýšľať "Ach-hah! Stačí zmeniť premennú MAX_PATH a vyriešiť problém! "Bohužiaľ, nie je to tak jednoduché. Nielenže je premenná MAX_PATH v podstate pevne zakódovaná do systému Windows, ale aj keby ste prešli obrovským problémom s jej zmenou, skončili by ste tým, že by ste to tak stratili, že by to nestojí za to. Príliš veľa aplikácií očakáva, že premenná cesty bude tým, čo systém Windows dlho určil. Nemôžeme ísť len zmeniť to bez toho, aby sme vytvorili obrovský neporiadok.
Kde vám to opustí? No, najjednoduchším riešením je len upraviť údaje o trase. Napríklad, ak máte tonu uložených článkov, kde aplikácia / rozšírenie, ktoré ste použili na ich uloženie z webu, vytvorili adresár, ktorý bol úplným názvom článku + vedenie článku a potom samotný názov súboru je úplný názov článku + vedenie článku, bolo by jednoduché dosiahnuť alebo prekročiť hodnotu MAX_PATH s jedným uložením. Úpravou týchto obrovských názvov priečinkov a článkov až po rozumnejšiu veľkosť je jednoduchý spôsob, ako problém vyriešiť.
Ak máte obrovský počet súborov s dlhou cestou a nechcete ich upravovať všetky (alebo ak chcete vymazať tony starých adresárov, ktoré sú príliš dlhé na to, aby sa Windows vyrovnal, keď je obmedzený premennou MAX_PATH), existuje okolo príkazového riadku. Aj keď systém Windows je obmedzený premennou MAX_PATH, inžinieri systému Windows si uvedomili, že by existovali situácie, keď by používatelia museli riešiť dlhšie názvy ciest. Rozhranie API systému Windows má preto funkciu na riešenie extrémne dlhých ciest.
Aby ste mohli využívať toto rozhranie API a používať nástroje na príkazovom riadku na vaše neprenosné zložky / názvy súborov, jednoducho musíte pridať názov adresára pomocou niekoľkých ďalších znakov. Napríklad, ak by ste mali obrovskú štruktúru adresárov, ktorú ste chceli odstrániť (ale pri jej pokuse ste dostali chybu z dôvodu dĺžky cesty), môžete zmeniť príkaz z:
rmdir c: \ documents \ some-really-super-long-folder-názov-schéma \
na adresu:
rmdir \\? \ c: \ documents \ some-really-super-long-folder-názov-schéma \
Kľúčom je pridanie \\? \
časť pred začiatkom cesty k súboru; to nariaďuje systému Windows, aby ignoroval obmedzenia uložené premennou MAX_PATH a aby komunikoval s cestou, ktorú ste práve dodali, dodanú / chápanú priamo systémom podkladových súborov (čo môže jednoznačne podporiť dlhšiu cestu). Ako vždy, buďte opatrní v príkazovom riadku, aby ste sa vyhli náhodnému vymazaniu súborov alebo adresárov, ktoré ste chceli nechať neporušené.
Ak náš prehľad tohto problému ste zvedaví, rozhodne sa ponorte do tohto článku z knižnice Microsoft Developer Network, Pomenovanie súborov, ciest a menných priestorov, pre viac informácií o tom, čo sa deje pod kapucňou.
Máte naliehavú technickú otázku? Napíšte nám e-mail na adresu [email protected] a budeme sa snažiť odpovedať na ne.