Waarom rapporteert Windows deze map is te lang om te kopiëren?

Video: Waarom rapporteert Windows deze map is te lang om te kopiëren?

Video: Waarom rapporteert Windows deze map is te lang om te kopiëren?
Video: Google Titan Security Key Bundle | How to Set Up Advanced Online Protection 2024, Maart
Waarom rapporteert Windows deze map is te lang om te kopiëren?
Waarom rapporteert Windows deze map is te lang om te kopiëren?
Anonim
Als je lang genoeg met Windows werkt, vooral met mappen en bestanden met lange namen, kom je een bizarre fout tegen: Windows meldt dat het mappad of de bestandsnaam te lang is om naar een nieuwe bestemming te gaan of zelfs te verwijderen. Wat is er aan de hand?
Als je lang genoeg met Windows werkt, vooral met mappen en bestanden met lange namen, kom je een bizarre fout tegen: Windows meldt dat het mappad of de bestandsnaam te lang is om naar een nieuwe bestemming te gaan of zelfs te verwijderen. Wat is er aan de hand?

Hey How-To Geek!

So the other day, I was reorganizing some files on my computer, creating folders, that kind of stuff. Then, when I was moving some files into a folder, I get a message, stating that the resulting folder path would be too long. I was confused. I know that every single OS since DOS supports Long Filenames, yet Windows claims that the path is too long? Why does this happen?

Sincerly,

Mr. Disorganized

Het probleem dat je tegenkomt is een ongelukkige kruising van twee systemen die, in gevallen als deze, een fout oplevert. Om precies te begrijpen waar de fout vandaan komt, moeten we ingaan op de geschiedenis van lange bestandsnamen (LFN) en de manier waarop Windows met hen samenwerkt voordat we ons verdiepen in oplossingen.

Lange bestandsnamen werden geïntroduceerd, via de onderliggende MS-DOS-architectuur, in Windows 95. Het nieuwe LFN-systeem stond bestands- en mapnamen toe van maximaal 255 tekens. Dit was een welkome uitbreiding van het vorige bestandsnaamsysteem, meestal 8.3 bestandsnaamgeving genoemd omdat de naam beperkt was tot acht tekens en een extensie van drie cijfers, maar ook bekend als Short Filename (SFN). Zoals je je wel kunt voorstellen, waren er toen nog steeds veel DOS-gebaseerde apps en er waren meer dan een paar hoofdpijnen die probeerden om de nieuwere LFN's en de oude SFN's leuk met elkaar te laten spelen. Als je ooit een oudere diskette of CD-ROM tegenkwam met vreemd geknipte bestanden erop (zoals abcdef ~ 1.txt), werd de bestandsnaam gekort door een SFN-gebruikende oudere applicatie van wat langere en niet-ondersteunde LFN (zoals abcdefghijk. tekst).

We zijn echter ver verwijderd van het midden van de jaren negentig en het hele lange-bestandsnaam-item is (voor het grootste deel) duidelijk gladgestreken. Als u een versie van Windows van de afgelopen 10 jaar gebruikt, is het conflict tussen de bestandsnamen waarschijnlijk nog nooit tegengekomen, zoals we in de DOS / Windows 95-dagen tegenkwamen. Dat gezegd hebbende, we lopen nog steeds tegen hikken aan, zoals je ontdekte met je schijfopruimingsproject. Maar waarom? Als Windows 'Long Filename-systeem mappen en bestandsnamen van maximaal 255 tekens per component ondersteunt, op welke plaats loop je dan tegen? We kunnen NTFS (het bestandssysteem dat de overgrote meerderheid van de moderne Windows-machines gebruiken) niet de schuld geven. NTFS ondersteunt namelijk het koppelen van mappen en bestandsnamen tot een totale padlengte van 32,767 tekens. Dat is veel groter dan de typische directorystructuur die de meeste gebruikers ooit nodig zouden hebben.

Waar het allemaal uit elkaar valt, is een kunstmatige beperking Windows-stacks bovenop het LFN / NTFS-systeem: de MAX_PATH-variabele. De variabele MAX_PATH geeft aan dat een volledige directorystructuur in Windows maximaal 260 tekens mag bevatten, inclusief de stationsletter, dubbele punt, backslash en nul-speling aan het einde. Je hebt dus alleen een potentieel reëel MAX_PATH van 256 tekens, bijvoorbeeld C: uw-256-karakter-pad.

Dus wat er gebeurde toen je je computer aan het opruimen was, was dat je een map had met een al lang pad (ofwel omdat de mapnamen lang waren, de bestandsnamen lang waren, of beide), en toen je probeerde om een of meer van die mappen in een andere map met een lang pad, de totale lengte van de padnaam overschreed de 260 tekens limiet opgelegd door de MAX_PATH variabele.

Nu denkt u misschien: "Ah-hah! We veranderen gewoon de MAX_PATH-variabele en lossen het probleem op! "Helaas is het niet zo eenvoudig. Niet alleen is de variabele MAX_PATH in feite hard gecodeerd in Windows, maar zelfs als je door het enorme gedoe ging om het te veranderen, zou je uiteindelijk zoveel breken dat het het niet waard zou zijn. Te veel toepassingen verwachten dat de padvariabele is wat Windows al lang heeft opgegeven. We kunnen het niet zomaar veranderen, zonder een enorme puinhoop te creëren.

Waar verlaat dat jou? Welnu, de eenvoudigste oplossing is om alleen de padgegevens te bewerken. Als u bijvoorbeeld een hoop opgeslagen artikelen hebt, waarbij de toepassing / extensie die u gebruikte om ze op te slaan van het web een map heeft gemaakt die de volledige titel van het artikel + de artikellead was, en de bestandsnaam zelf de volledige titel is van het artikel + de artikelstart, zou het heel eenvoudig zijn om de MAX_PATH te raken of te overschrijden met een enkele opslag. Het is een gemakkelijke manier om het probleem op te lossen door die enorme map en artikeltitels te bewerken tot een redelijker formaat.

Als u een groot aantal bestanden met een lang pad hebt en u ze niet allemaal wilt bewerken (of als u dat wilt)verwijderen een ton oude mappen die te lang zijn voor Windows om mee om te gaan als deze wordt beperkt door de MAX_PATH variabele), er is een opdrachtregel rond. Hoewel Windows wordt beperkt door de variabele MAX_PATH, realiseerden Windows-technici zich dat er situaties zouden zijn waarbij gebruikers langere padnamen zouden moeten verwerken. Als zodanig heeft de Windows API een functie voor het omgaan met extreem lange paden.

Om te profiteren van die API en opdrachtregelprogramma's te gebruiken voor uw logge mappen / bestandsnamen, hoeft u alleen maar de mapnaam toe te voegen met een paar extra tekens. Als u bijvoorbeeld een enorme directorystructuur had die u wilde verwijderen (maar een fout ontving vanwege de padlengte toen u deze probeerde), kunt u de opdracht wijzigen in:

rmdir c:documentssome-really-super-long-folder-name-scheme

naar:

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

De sleutel is de toevoeging van de

?

gedeelte voor het begin van het bestandspad; dit geeft Windows de opdracht de beperkingen te negeren die zijn opgelegd door de MAX_PATH-variabele en om te werken met het pad dat je zojuist hebt opgegeven, zoals rechtstreeks door het onderliggende bestandssysteem wordt geleverd / begrepen (wat een langer pad duidelijk kan ondersteunen).Wees zoals altijd voorzichtig bij de opdrachtprompt om te voorkomen dat per ongeluk bestanden of mappen worden verwijderd die u intact wilde laten.

Als je nieuwsgierig bent naar ons overzicht van dit onderwerp, kun je dit artikel van de Microsoft Developer Network-bibliotheek, Bestanden, Paden en Namespaces benoemen, voor meer informatie over wat er zich onder de motorkap afspeelt, zeker onderzoeken.

Heeft u een dringende technische vraag? Schiet ons een e-mail op [email protected] en we zullen ons best doen om deze te beantwoorden.

Aanbevolen: