Lunghezza massima del nome file in NTFS (Windows XP e Windows Vista)?


261

Sto progettando una tabella di database che conterrà i nomi dei file caricati. Qual è la lunghezza massima di un nome file in NTFS utilizzato da Windows XP o Vista?


83
Non ho mai visto così tante risposte diverse a quella che dovrebbe essere una domanda semplice. 199, 255, 256, 257, 260, "circa 30.000", "circa 32000" e "dipende". Certo, ci sono qualificatori, ma questi non possono essere tutti giusti, vero?
MickeyfAgain_BeforeExitOfSO

7
è 255, lo so perché ho dovuto creare un'applicazione per impedire agli utenti aziendali di raggiungerlo, poiché causa problemi sui nostri server di archiviazione.
RobertPitt,

2
@RobertPitt. Ti stai perdendo qualcosa. Citazione da MSDN: "la lunghezza massima per un percorso è MAX_PATH, che è definita come 260 caratteri"
Michael Olesen,

7
@ Michael9000. Credo che RobertPitt stia citando il limite del nome file (che è di cosa tratta questa domanda), non il limite del percorso.
gdw2,

7
NTFS NON è affatto limitato a MAX_PATH, la shell di Windows è limitata a MAX_PATH, la lunghezza massima del percorso NTFS è 32k
paulm

Risposte:


286

I singoli componenti di un nome file (ovvero ciascuna sottodirectory lungo il percorso e il nome file finale) sono limitati a 255 caratteri e la lunghezza totale del percorso è limitata a circa 32.000 caratteri.

Tuttavia, su Windows, non puoi superare il MAX_PATHvalore (259 caratteri per i file, 248 per le cartelle). Vederehttp://msdn.microsoft.com/en-us/library/aa365247.aspx per i dettagli completi.


4
Ecco alcuni fatti più che conferma questa risposta (di Windows è normalmente limitato a 260 caratteri): msdn.microsoft.com/en-us/library/... e blogs.msdn.com/b/bclteam/archive/2007/02/13 /…
Michael Olesen,

62
Corretto per NTFS, non corretto per Windows, in base al collegamento fornito: "Nell'API di Windows (con alcune eccezioni discusse nei paragrafi seguenti), la lunghezza massima per un percorso è MAX_PATH, che è definita come 260 caratteri". Il percorso totale è, per tutti gli scopi pratici, limitato a 259 caratteri (tenendo conto del null-terminator).
Lawrence Dol

9
Apparentemente se si utilizza la "versione unicode" dei metodi del file API di Windows, è possibile ottenere fino a 32767 se si prefiggono i nomi dei percorsi con "\\? \" È giusto?
rogerdpack,

6
@rogerdpack: per il percorso completo, sì, ma ogni singolo componente (sottocartella / file finale) ha un limite di 255 punti di codice utf-16. Inoltre, il normale software prevede MAX_PATH, quindi ... boom :)
snemarch

5
In Windows 10 (versione 1607 - Anniversary Update) e Windows Server 2016 hai la possibilità di avere un'opzione per ignorare il problema MAX_PATH sovrascrivendo una voce dei criteri di gruppo abilita i percorsi lunghi NTFS in Configurazione computer -> Modelli amministratore -> Sistema -> FileSystem:
Steven Mark Ford,

28

Sono 257 caratteri. Per essere precisi: NTFS stesso impone una lunghezza massima del nome file di diverse migliaia di caratteri (circa 30'000 qualcosa). Tuttavia, Windows impone una lunghezza massima di 260 per Path + Nome file. La cartella drive + occupa almeno 3 caratteri, quindi si arriva a 257.


21
Sbagliato: il terminatore NUL fa parte di MAX_PATH, che ti lascia con un percorso massimo di 256 caratteri (che non sarai in grado di creare a causa del limite dei singoli componenti di 255).
snemarch,

4
"che non sarai in grado di creare a causa del limite dei singoli componenti di 255" Sbagliato. Stiamo parlando della lunghezza massima del percorso, non della lunghezza massima dei singoli componenti del percorso. Inoltre "Quando si utilizza un'API per creare una directory, il percorso specificato non può essere così lungo che non è possibile aggiungere un nome di file 8.3 (ovvero, il nome della directory non può superare MAX_PATH meno 12)."
Ludovic Kuty,

Questo dibattito si arresta solo perché l'API di basso livello consente la creazione di nomi di file 256 caratteri, supponendo che il carattere 256 sia nullo, ma il file diventa inaccessibile (nascosto) alle applicazioni native, quindi generalmente non utile.
Conrad B,

1
@LudovicKuty: in realtà l'OP stava parlando della limitazione della lunghezza del nome del file , non della lunghezza del percorso (sì, anche nella revisione originale, ho controllato). E si riferiva in modo molto specifico ai limiti NTFS e non ai limiti del sistema operativo, un particolare sottosistema o API o framework.
0xC0000022L

@ 0xC0000022L Sì davvero. L'ho letto male nella domanda OP e mi sono concentrato sui commenti che parlano della lunghezza del nome file e della lunghezza del percorso.
Ludovic Kuty,

27

Questo è ciò che dice "Eccezione non gestita" su Framework 4.5 quando si tenta di salvare un file con un nome file lungo:

Il percorso, il nome file o entrambi specificati sono troppo lunghi. Il nome file completo deve contenere meno di 260 caratteri e il nome della directory deve essere inferiore a 248 caratteri.

immagine dello schermo


16

199 su Windows XP NTFS, ho appena controllato.

Questa non è teoria ma provando solo sul mio laptop. Potrebbero esserci effetti attenuanti, ma fisicamente non mi permetterà di ingrandirlo.

C'è qualche altra impostazione che limita questo, mi chiedo? Provalo tu stesso.


1
Lo ho confermato sulla mia versione di XP, che dolore
Julian Young,

Ho fatto lo stesso su Windows XP solo per ridacchiare. Ho raggiunto un limite di 200 caratteri. Quindi ho appena creato un file con 255 volte w, l' ho eliminato e ho creato una cartella con lo stesso nome su Windows 7 x64. Ora la domanda è qual è il fattore limitante qui: la versione NTFS, il sistema operativo o il sottosistema o l'API Win32 in XP?
0xC0000022L

Il limite di 200 caratteri sembra essere nell'esploratore. Altri programmi possono creare nomi di file più lunghi. Questo è probabilmente un limite intenzionale per salvare l'utente da se stesso. :-)
avl_sweden,

13

Secondo MSDN , ha 260 caratteri. Include "<NUL>"il carattere null che termina invisibile, quindi la lunghezza effettiva è 259.

Ma leggi l'articolo, è un po 'più complicato.


1
In realtà, l'articolo di MSDN a cui si fa riferimento afferma che il percorso è limitato a 260 caratteri ma la lunghezza del nome file dipende dal filesystem (ma comunemente 255 byte). Tuttavia, è possibile utilizzare "Versioni Unicode [delle funzioni API di Windows]" per aumentare il limite del percorso a 32767 byte, ma tale limite viene ridotto da Windows che espande internamente il \\?\ prefisso richiesto in fase di esecuzione a una lunghezza non specificata. Il percorso deve rimanere al di sotto di 32767 byte dopo questa espansione.
Mikko Rantalainen,

13

La lunghezza in NTFS è 255. Il NameLengthcampo nell'attributo NTFS $Filenameè un byte senza offset; questo produce un intervallo di 0-255.

Il nome del file stesso può essere in diversi "spazi dei nomi". Finora ci sono: POSIX, WIN32, DOS e (WIN32DOS - quando un nome file può essere nativamente un nome DOS). (Poiché la stringa ha una lunghezza, potrebbe contenere \ 0 ma ciò comporterebbe problemi e non si trova negli spazi dei nomi sopra.)

Pertanto, il nome di un file o directory può contenere fino a 255 caratteri. Quando si specifica il percorso completo in Windows, è necessario aggiungere un prefisso al percorso con \\? \ (Oppure utilizzare \\? \ UNC \ server \ share per i percorsi UNC) per contrassegnare questo percorso come lungo (~ 32k caratteri) . Se il percorso è più lungo, dovrai impostare la directory di lavoro lungo il percorso (ugh - effetti collaterali dovuti all'impostazione dell'intero processo).




4

Sto aggiungendo questo alla risposta approvata sopra.

Per essere chiari, il motivo per cui le persone credono che sia 255-260 caratteri è perché questo è tutto ciò che supporta Windows Explorer. Si sbaglierà facendo qualcosa come una copia di file su nomi di file più lunghi di così. Tuttavia, un programma può leggere e scrivere nomi di file molto più lunghi (il che è il modo in cui Explorer si lamenta in primo luogo). La "correzione consigliata" di Microsoft in situazioni come questa è aprire il file nel programma originale che lo ha scritto e rinominarlo.


Ho provato a salvare un file nel profondo di una gerarchia di cartelle decisamente superiore a 260+ caratteri dalla riga di comando con vim ma non ho avuto successo.
panny,

@panny: quindi gli autori di Vim non si sono preoccupati di implementare nomi di percorsi lunghi. Non è colpa di Windows né del sottosistema Win32 né ha nulla a che fare con la limitazione della lunghezza del nome file per NTFS richiesta dall'OP.
0xC0000022L

3

Secondo la nuova documentazione di Windows SDK (8.0) sembra che venga fornito un nuovo limite di percorso. Esiste un nuovo set di funzioni di gestione dei percorsi e una definizione di PATHCCH_MAX_CCH come segue:

// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH             0x8000

3
Tuttavia l'esploratore di Windows 8 (anteprima Win8.1 nel mio caso) non funziona con questo limite e non accetterà percorsi più lunghi di 259 caratteri.
Cplusminus_is_coming

3

Questa parte della documentazione ufficiale afferma chiaramente che sono 255 caratteri Unicode per NTFS, exFAT e FAT32 e 127 Unicode o 254 caratteri ASCII per UDF.

A parte questo, la lunghezza massima del nome percorso è sempre 32.760 caratteri Unicode, con ogni componente percorso non più di 255 caratteri.


Abbastanza vicino. Come faccio notare in un commento sulla risposta accettata, sono 32767 WCHARelementi. No, non sono "caratteri Unicode" (controlla la terminologia Unicode: punti di codice, caratteri ecc ...!).
0xC0000022L


-2

238! L'ho controllato con Win7 a 32 bit con il seguente script bat:

set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF

L'ho controllato in Windows 7 con un programma che gestisce correttamente percorsi lunghi. Ogni singolo segmento di percorso può contenere 255 caratteri (che ho usato w). Così quello che ora?
0xC0000022L

-2

In realtà è 256, vedere Confronto di funzionalità del file system, Limiti .

Per ripetere un post su http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html

"Supponendo che stiamo parlando di NTFS e non di FAT32, i" 255 caratteri per percorso + file "sono una limitazione di Explorer, non del file system stesso. NTFS supporta percorsi lunghi fino a 32.000 caratteri Unicode, con ogni componente fino a 255 caratteri.

Explorer - e l'API di Windows - ti limita a 260 caratteri per il percorso, che include lettera di unità, due punti, barre di separazione e un carattere null terminante. È possibile leggere un percorso più lungo in Windows se lo si avvia con un \\"

Se leggi i post precedenti vedrai che c'è una quinta cosa di cui puoi essere certo: Trovare almeno un ostinato utente di computer!


4
No - è 255. Il campo NameLength nell'attributo NTFS $ Filename è un byte senza offset; questo produce un intervallo di 0-255
Dominik Weber,

-2

Non riesco a creare un file con il nome + punto + estensione in WS 2012 Explorer più lungo di 224 caratteri. Non sparare al messaggero!

Nella CMD dello stesso server non riesco a creare un nome di lunghezza superiore a 235 caratteri:

Il sistema non può trovare il percorso specificato.

Il file con un nome di 224 caratteri creato in Explorer non può essere aperto in Notepad ++ - invece viene fornito solo un nuovo file.


The system cannot find the path specified.non è lo stesso di The specified path, file name, or both are too long.. Immagino tu abbia avuto un refuso o qualcosa del genere. Questo messaggio viene visualizzato se si tenta di creare un file in un percorso che non esiste o se si desidera spostarsi in una direzione che non esiste.
Matthias Burger
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.