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 errore bizzarro: 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, come geek!
Così 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, affermando che il percorso della cartella risultante sarebbe troppo lungo. Ero confuso. So che ogni singolo sistema operativo dal momento che DOS supporta Long Filenames, eppure Windows afferma che il percorso è troppo lungo? Perché questo succede?
Cordialmente,
Mr. Disorganizzato
Il problema che stai incontrando è uno sfortunato incrocio di due sistemi che, in casi come questo, produce un errore. Per capire esattamente da dove viene 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. Si trattava di una gradita espansione del precedente sistema di nomi di file, generalmente chiamato filenaming 8.3 poiché il nome era limitato a otto caratteri e un'estensione di tre cifre, ma anche noto come Short Filename (SFN). Come puoi immaginare, all'epoca c'erano ancora molte app basate su DOS e c'erano pochissimi mal di testa che cercavano di far sì che i nuovi LFN e gli SFN legacy giocassero bene l'uno con l'altro. Se hai mai incontrato un vecchio dischetto o un CD-ROM con file stranamente troncati (come abcdef ~ 1.txt) quel nome file è stato abbattuto da qualche SFN usando l'applicazione legacy da un LFN più lungo e non supportato (come abcdefghijk. testo).
Siamo molto lontani dalla metà degli anni '90, tuttavia, e l'intera faccenda dei Long Filename è (per la maggior parte) risolta con fermezza. Se stai utilizzando una versione di Windows degli ultimi 10 anni, probabilmente non avrai mai nemmeno incontrato un conflitto di lunghezza del nome del file come in passato ci siamo imbattuti nei giorni DOS / Windows 95. Detto questo, ci imbattiamo ancora nel singhiozzo, come hai scoperto con il tuo progetto di pulizia del disco. Ma perché? Se il sistema Long Filename di Windows supporta cartelle e nomi di file fino a 255 caratteri per componente, a che muro stai andando? Non possiamo incolpare NTFS (il filesystem utilizzato dalla stragrande maggioranza delle moderne macchine Windows) poiché NTFS supporterà un concatenamento di cartelle e nomi di file fino a una lunghezza totale del percorso di 32.767 caratteri. Questo supera di gran lunga la tipica struttura di directory che la maggior parte degli utenti avrebbe mai avuto bisogno.
Dove tutto cade a pezzi è una restrizione artificiale Windows si sovrappone al 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, inclusa la lettera di unità, i due punti, il backslash e il gioco nullo alla fine. Pertanto, hai solo un potenziale MAX_PATH reale di 256 caratteri, ad es. C: \ your-256 caratteri-path \.
Quindi quello che è successo quando stavi pulendo 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 provavi a spostare uno o più 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-hah! Cambiamo semplicemente la variabile MAX_PATH e risolviamo il problema! "Ahimè, non è così semplice. Non solo la variabile MAX_PATH è essenzialmente codificata in Windows, ma anche se hai affrontato l'enorme problema di cambiarla, finiresti per romperti così tanto che non ne varrebbe la pena. Troppe applicazioni si aspettano che la variabile path sia ciò che Windows ha specificato da tempo. Non possiamo andare in giro cambiandolo senza creare un enorme casino.
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 / l'estensione che hai usato per salvarli dal web ha creato una directory che era il titolo completo dell'articolo + il lead dell'articolo, e quindi il nome del file stesso è il titolo completo dell'articolo + lead dell'articolo, sarebbe davvero semplice colpire o superare MAX_PATH con un singolo salvataggio. Modificare questi enormi titoli di cartelle e articoli in una dimensione più ragionevole è un modo semplice per risolvere il problema.
Se si dispone di un numero elevato di file con un percorso lungo e non si desidera modificarli tutti (o se si desidera Elimina una tonnellata di vecchie directory che sono troppo lunghe per essere gestite da Windows quando sono limitate dalla variabile MAX_PATH), esiste una linea di comando da aggirare. Anche se Windows è limitato dalla variabile MAX_PATH, i tecnici di Windows hanno realizzato che ci sarebbero state situazioni in cui gli utenti avrebbero dovuto occuparsi di nomi di percorso più lunghi. In quanto tale, l'API di Windows ha una funzione per gestire percorsi estremamente lunghi.
Per approfittare di tale API e utilizzare gli strumenti da riga di comando sulle tue ingombranti cartelle / nomi di file, devi semplicemente aggiungere il nome della directory con alcuni caratteri extra. Ad esempio, se hai una struttura di directory enorme che desideri eliminare (ma hai ricevuto un errore a causa della lunghezza del percorso quando lo hai provato), puoi cambiare il comando da:
rmdir c: \ documents \ schema di nome-cartella-veramente-lungo-lungo-lungo \
a:
rmdir \\? \ c: \ documents \ schema-nome-cartella-veramente-super-lungo \
La chiave è l'aggiunta del \\? \
porzione prima dell'inizio del percorso del file; ciò 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, fai attenzione al prompt dei comandi per evitare di cancellare accidentalmente file o directory che intendi lasciare intatti.
Se la nostra panoramica di questo problema ti incuriosisce, consulta questo articolo dalla libreria della Microsoft Developer Network, Naming Files, Paths e Namespace, per ulteriori informazioni su cosa sta succedendo sotto la cappa.
Hai una domanda tecnica urgente? Mandaci una mail a [email protected] e faremo del nostro meglio per rispondere.