Perché Windows segnala che questa cartella è troppo lunga per essere copiata?

Se lavori con Windows abbastanza a lungo, specialmente con cartelle e file con nomi lunghi, ti imbatterai in un bizzarro errore: Windows segnalerà che il percorso della cartella o il nome del file è troppo lungo per spostarsi in una nuova destinazione o addirittura eliminarlo. Qual è l'accordo?

Ehi How-To Geek!

Quindi l'altro giorno, stavo riorganizzando alcuni file sul mio computer, creando cartelle, quel tipo di cose. Quindi, quando stavo spostando alcuni file in una cartella, ricevo un messaggio che indica che il percorso della cartella risultante sarebbe troppo lungo. Ero confuso. So che ogni singolo sistema operativo dal momento che DOS supporta i nomi di file lunghi, tuttavia Windows afferma che il percorso è troppo lungo? Perché succede?

Cordialmente,

Mr. Disorganized

Il problema che si sta verificando è una sfortunata intersezione di due sistemi che, in casi come questo, genera un errore. Per capire esattamente da dove proviene l'errore, dobbiamo scavare nella storia di Long Filenames (LFN) e come Windows interagisce con loro prima di approfondire le soluzioni.

I nomi di file lunghi sono stati introdotti, tramite l'architettura MS-DOS sottostante, in Windows 95. Il nuovo sistema LFN consentiva nomi di file e directory con un massimo di 255 caratteri. Questa è stata una gradita espansione del precedente sistema di nomi di file, di solito chiamato 8.3 nome del file perché il nome era limitato a otto caratteri e un'estensione a tre cifre, ma noto anche come Nome file breve (SFN). Come puoi immaginare, all'epoca c'erano ancora molte app basate su DOS in circolazione e c'erano più di un paio di mal di testa che cercavano di far funzionare bene i nuovi LFN e gli SFN legacy. Se ti sei mai imbattuto in un vecchio dischetto o CD-ROM con file stranamente troncati su di esso (come abcdef ~ 1.txt) quel nome file è stato abbattuto da un'applicazione legacy che utilizza SFN da un LFN più lungo e non supportato (come abcdefghijk. testo).

Siamo molto lontani dalla metà degli anni '90, tuttavia, e l'intera faccenda del nome lungo è stata (per la maggior parte) saldamente risolta. Se stai eseguendo una versione di Windows negli ultimi 10 anni, probabilmente non ti sei mai imbattuto in un conflitto di lunghezza del nome del file, come in passato avremmo incontrato nei DOS / Windows 95 giorni. Detto questo, ci imbattiamo ancora in singhiozzi, come hai scoperto con il tuo progetto di pulizia del disco. Ma perché? Se il sistema di nomi di file lunghi di Windows supporta cartelle e nomi di file con un massimo di 255 caratteri per componente, in quale muro stai correndo? Non possiamo incolpare NTFS (il filesystem che la stragrande maggioranza dei moderni computer Windows utilizza) in quanto NTFS supporterà un concatenamento di cartelle e nomi di file fino a una lunghezza totale del percorso di 32.767 caratteri. Ciò supera di gran lunga la tipica struttura di directory di cui la maggior parte degli utenti avrebbe mai bisogno.

Dove tutto cade a pezzi è una restrizione artificiale che Windows impila sul sistema LFN / NTFS: la variabile MAX_PATH. La variabile MAX_PATH specifica che una struttura di directory completa in Windows non può superare i 260 caratteri totali, inclusi la lettera di unità, i due punti, la barra rovesciata e la barra inversa alla fine. Quindi hai solo un potenziale MAX_PATH reale di 256 caratteri, ad es. C: your-256 caratteri-path .

Quindi quello che è successo quando stavi ripulendo il tuo computer è che avevi una directory con un percorso già lungo (o perché i nomi delle cartelle erano lunghi, i nomi dei file erano lunghi o entrambi) e quando hai tentato di spostare uno o più di quelle directory in un'altra directory con un percorso lungo, la lunghezza totale del nome del percorso ha superato il limite di 260 caratteri imposto dalla variabile MAX_PATH.

Ora potresti pensare “Ah-ah! Modificheremo semplicemente la variabile MAX_PATH e risolveremo il problema! “Ahimè, non è così semplice. Non solo la variabile MAX_PATH è essenzialmente codificata in Windows, ma anche se si affrontasse l'enorme seccatura di cambiarla, si finirebbe per rompere così tanto che non varrebbe la pena. Troppe applicazioni prevedono che la variabile path sia quella che Windows ha da tempo specificato. Non possiamo semplicemente andare in giro a cambiarlo senza creare un casino enorme.

Dove ti lascia? Bene, la soluzione più semplice è semplicemente modificare i dati del percorso. Ad esempio, se hai un sacco di articoli salvati in cui l'applicazione / estensione che hai usato per salvarli dal web ha creato una directory che era il titolo completo dell'articolo + il piombo dell'articolo, e quindi il nome del file stesso è il titolo completo dell'articolo + il piombo dell'articolo, sarebbe davvero semplice colpire o superare il MAX_PATH con un singolo salvataggio. Modificare questi enormi titoli di cartelle e articoli fino a dimensioni più ragionevoli è un modo semplice per risolvere il problema.

Se hai un numero enorme di file con un percorso lungo e non vuoi modificarli tutti (o se vuoi Elimina un sacco di vecchie directory che sono troppo lunghe per essere gestite da Windows quando sono limitate dalla variabile MAX_PATH), c'è una soluzione da riga di comando. Anche se Windows è limitato dalla variabile MAX_PATH, gli ingegneri di Windows hanno capito che ci sarebbero state situazioni in cui gli utenti avrebbero dovuto gestire nomi di percorso più lunghi. Pertanto, l'API di Windows ha una funzione per gestire percorsi estremamente lunghi.

Per sfruttare l'API e utilizzare gli strumenti della riga di comando su cartelle / nomi file ingombranti, è sufficiente aggiungere il nome della directory con alcuni caratteri extra. Ad esempio, se si disponesse di un'enorme struttura di directory che si desidera eliminare (ma si è verificato un errore a causa della lunghezza del percorso durante il tentativo), è possibile modificare il comando da:

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

per:

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

La chiave è l'aggiunta di \? porzione prima dell'inizio del percorso del file; questo indica a Windows di ignorare le limitazioni imposte dalla variabile MAX_PATH e di interagire con il percorso appena fornito come fornito / compreso direttamente dal file system sottostante (che può chiaramente supportare un percorso più lungo). Come sempre, prestare attenzione al prompt dei comandi per evitare di eliminare accidentalmente file o directory che si intende lasciare intatti.

Se la nostra panoramica di questo problema ti incuriosisce, approfondisci sicuramente questo articolo dalla libreria Microsoft Developer Network, Naming Files, Paths e Namespace, per ulteriori informazioni su ciò che accade sotto il cofano.


Hai una domanda tecnica urgente? Mandaci una email a ask@howtogeek.com e faremo del nostro meglio per rispondere.

Articoli correlati

Ultimi articoli