Qual è il percorso file più lungo che può gestire Windows?


57

Qual è il percorso file più lungo che può gestire Windows?

Risposte:


48

Lunghezza massima del percorso (da MSDN)

Nell'API di Windows (con alcune eccezioni discusse nei paragrafi seguenti), la lunghezza massima per un percorso è MAX_PATH, che è definita come 260 caratteri . Un percorso locale è strutturato nel seguente ordine: lettera di unità, due punti, barra rovesciata, componenti separati da barre rovesciate e un carattere null terminante. Ad esempio, il percorso massimo sull'unità D è "D: \ <una stringa di percorso di 256 caratteri> <NUL>" dove "<NUL>" rappresenta il carattere null di terminazione invisibile per la codepage di sistema corrente. (I caratteri <> sono usati qui per chiarezza visiva e non possono far parte di una stringa di percorso valida.)


4
Dovresti dire che puoi gestire percorsi che superano questo limite prefissandolo con `\\?` (Penso che fosse quella sequenza di caratteri).
Joey,

3
dovresti anche indicare il limite per i percorsi unicode menzionati nel secondo paragrafo: ~ 32k
akira,

260? 256 caratteri ignorando unità: \ e terminatore. È il 2009, perché abbiamo solo un byte di personaggi con cui giocare?
Phoshi,

@Phoshi Le API per utilizzare percorsi più lunghi non sono utilizzate dal sistema operativo per impostazione predefinita, perché passare stringhe arbitrariamente lunghe ad applicazioni che sono state scritte male dagli sviluppatori che sapevano che il percorso non poteva mai essere più lungo di 260 caratteri e ha deciso di allocare una lunghezza fissa l'array per conservarlo comporterebbe un numero enorme di overflow del buffer che causano l'arresto anomalo e / o lo sfruttamento delle applicazioni. Le implementazioni leggermente migliori da parte degli sviluppatori con la stessa conoscenza errata si interrompono perché la loro convalida del percorso ha segnalato un errore troppo lungo.
Dan Neely,

15

Percorso file XP - 250 caratteri

Percorso del file Vista - 260 caratteri

Il percorso più lungo su un'installazione pulita di Windows XP è di 152 caratteri.

Il percorso più lungo in un'installazione semi-pulita di Windows Vista è di 195 caratteri:

Windows XP consente nomi di file con una lunghezza massima di 255 caratteri

Windows Vista consente nomi di file ancora più lunghi contenenti fino a 260 caratteri.

http://www.codinghorror.com/blog/archives/000729.html


5
questo è vero se non usi unicode-api, che estende un po 'il limite (~ 32k, vedi msdn.microsoft.com/en-us/library/… )
Akira,

1
hmmm. a quel ritmo, il limite in Win7 dovrebbe essere di circa 265 caratteri, no?
Quack Quixote,

Perché dovrebbero aumentare il limite di dieci caratteri? Non ne vale la pena, lo fa: \
Phoshi l'

questo non è corretto. La lunghezza massima del nome file è ancora 255 caratteri in qualsiasi Windows, poiché questo è il limite NTFS
phuclv

8

La costante di Windows MAX_PATHè uguale a 260 come dicono altre risposte, tuttavia, il percorso più lungo reale è 32767.

Vedi qui .

32k è durante l'utilizzo di UNICODE, ma ora dobbiamo usarlo, quindi dovremmo anche usare tale lunghezza massima del percorso.

Inoltre, puoi dare un'occhiata alla mia risposta in SO che spiega alcune cose più dettagliate sulla lunghezza massima del percorso.


1

Il limite "classico" è di 260 caratteri: drive letter+ :\+ 255 characters of filename+ \(o per arrotondamento) + null terminatorcome indicato nelle altre risposte

Tuttavia, il limite interno reale è 32767 caratteri che possono essere raggiunti aggiungendo \\?\un percorso completo

L'API di Windows ha molte funzioni che hanno anche versioni Unicode per consentire un percorso di lunghezza estesa per una lunghezza totale del percorso massima di 32.767 caratteri. Questo tipo di percorso è composto da componenti separati da barre rovesciate, ciascuna fino al valore restituito nel lpMaximumComponentLengthparametro della GetVolumeInformationfunzione (questo valore è comunemente 255 caratteri). Per specificare un percorso di lunghezza estesa, utilizzare il "\\?\"prefisso. Ad esempio "\\?\D:\very long path",.

Se per alcuni motivi non è possibile utilizzare percorsi completi, è possibile accedere a directory più profonde montando su una lettera di unità con subst/ diskparto creando un nodo / collegamento simbolico per abbreviare il percorso

Da Windows 10 il MAX_PATHlimite è stato rimosso anche se non per impostazione predefinita

A partire da Windows 10, versione 1607, le MAX_PATHlimitazioni sono state rimosse dalle comuni funzioni di file e directory di Win32. Tuttavia, è necessario attivare il nuovo comportamento.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

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.