Superare le restrizioni sulla lunghezza massima del percorso del file in Windows


36

Uno dei nostri clienti usa abitualmente nomi di percorsi molto lunghi (diverse cartelle nidificate, con nomi lunghi) e incontriamo abitualmente "problemi di formazione dell'utente" al fine di abbreviare il percorso a meno di 260 caratteri.

È disponibile una soluzione tecnica, possiamo premere una sorta di interruttore in Windows 7 e Windows 2008 R2 per dire "sì, basta ignorare questi problemi storici e far funzionare il nome del percorso +260 caratteri".

PS: ho letto e non sono stato completamente modificato da Naming Files, Paths e Namespace


3
Eccoci nel 2018 e il problema esiste ancora nella ROBOCOPIA. 255 limite. Coloro che lo superano semplicemente emettono un segnale acustico ma non copiano.
SDsolar,

@SDsolar: stai usando una vecchia versione di robocopy?
Naikrovek,

Sì, stavo per dire lo stesso - bisogna usare robocopy proprio perché può gestire percorsi lunghi ...
Rob Nicholson

Risposte:


12

I metodi ci sono, ma fino a quando Microsoft non ricodifica il widget del browser dei file siamo praticamente bloccati da quel vecchio problema. È subottimale, ma funziona così.


5
Bug nel software MS che non è stato corretto per alcune versioni del sistema operativo, questo è nuovo ...
Hubert Kario

2
Windows 10 1607 ha finalmente risolto il problema del browser di file e ha alcune magie per ingannare le applicazioni Win32 nel lavorare in questo strano nuovo mondo di enormi percorsi: howtogeek.com/266621/…
HackSlash

28

Sto solo citando un trucco che non vedo ancora menzionato qui.

Prendi questo file ad esempio:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Questo percorso completo del file è lungo 290 caratteri. La shell (Windows Explorer) e la maggior parte delle utility da riga di comando probabilmente non ti permetteranno di toccarlo.

Utilizzare il substcomando in questo modo:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

Ora puoi accedere (ed eliminare, spostare, ecc.) Così il file:

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

E ora quel nome di file ha solo ~ 235 caratteri o giù di lì, quindi non incontrerai più i problemi "Il nome del file è troppo lungo".

Nell'API di Windows, esiste una costante nota come MAX_PATH. MAX_PATH è di 260 caratteri. Il file system NTFS supporta effettivamente percorsi di file con un massimo di 32.767 caratteri. E puoi ancora usare nomi di percorsi lunghi 32.767 caratteri accedendo alle versioni Unicode (o "larghe") delle funzioni dell'API di Windows e anche prefissando il percorso con \\?\.

MAX_PATHè stato incastonato nella pietra molto tempo fa nel mondo di Windows. Penso che abbia qualcosa a che fare con gli standard ANSI al momento ... ma è una di quelle cose che è molto difficile per Microsoft cambiare ora, poiché ora abbiamo migliaia di programmi e applicazioni, tra cui alcuni scritti da Microsoft stessi, che usano MAX_PATHe fallirebbe in strani nuovi modi se la costante venisse improvvisamente cambiata. (Buffer overflow, corruzione dell'heap, ecc.)


9
Ho adottato un approccio simile substusando giunzioni di directory, che potrebbero essere più convenienti da pulire se stai solo cercando di apportare alcune modifiche rapide. Io uso Collegamento Shell Extension , ma si può semplicemente utilizzare il mklinkcomando in questo modo: mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow".
Charles Grunwald,

10

È possibile aggirare questa limitazione utilizzando la \\? \ C: notazione. È brutto, ma supporta file di lunghezza fino a 2 ^ 15.

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath


2
Sì, l'ho letto, come ho detto (vedi il mio link). Ma come posso beneficiarne esattamente? Posso mappare un'unità a \\? \ Qualcosa, ad esempio. Non capisco. L'articolo è destinato ai programmatori che utilizzano API di Windows. Mentre eseguo il codice in .NET in caso di necessità, non uso C ++ ecc. E non riesco a vedere come questo è rilevante per il personale dei miei clienti che utilizza Windows Explorer e la finestra di dialogo dei file comuni ecc.
Christopher Edwards,

1
Alla fine, non ce n'è. :-/ Purtroppo.
Chris K,

@ChristopherEdwards È possibile creare giunzioni ai punti inferiori nella gerarchia delle cartelle.
Hubert Kario,

1
@ChristopherEdwards potresti fare un collegamento c:\usr-dataa `c: \ Users \ VeryLongUserName \ LongFolderName` e dirgli di usare il primo, ma se nomina regolarmente le cartelle in 40 caratteri, questo non aiuta ...
Hubert Kario

2
7-zip esplorerà e copierà felicemente in \\? \ C: notazione, per quello che vale.
Matt Lyons,

9

Microsoft ha ora una correzione disponibile per questo inizio con Windows 10, che è spiegata nell'articolo MSDN File, nomi e spazi dei nomi .

darthcoder ha già risposto con dettagli sulla soluzione alternativa della \\?\C:notazione, ma ora esiste una chiave di registro in HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)cui è possibile utilizzare per rimuovere le limitazioni MAX_PATH per un singolo sistema. L'articolo menziona anche il supporto per il controllo dei Criteri di gruppo Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long pathsper l'organizzazione o l'implementazione a livello di gruppo, se necessario.


Non ho avuto tempo per test approfonditi, ma finora ho visto risultati contrastanti con questa soluzione e non posso confermare che ciò risolva il problema per Windows [file] Explorer.
JimNim,

2
Questo non funziona in Esplora file perché sebbene il sistema e NTFS siano in grado di gestire percorsi lunghi, Explorer non può farlo fino a quando non viene ricodificato.
ingyhere il

PS, dovrai far funzionare uno dei programmi di copia in questo link SO sopra Explorer.
ingyhere il

1
Buone informazioni Probabilmente mi limiterò a Robocopy in quel caso.
JimNim il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.