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?
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?
Risposte:
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_PATH
valore (259 caratteri per i file, 248 per le cartelle). Vederehttp://msdn.microsoft.com/en-us/library/aa365247.aspx per i dettagli completi.
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.
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.
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.
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?
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.
\\?\
prefisso richiesto in fase di esecuzione a una lunghezza non specificata. Il percorso deve rimanere al di sotto di 32767 byte dopo questa espansione.
La lunghezza in NTFS è 255. Il NameLength
campo 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).
255 caratteri.
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.
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
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.
WCHAR
elementi. No, non sono "caratteri Unicode" (controlla la terminologia Unicode: punti di codice, caratteri ecc ...!).
255 caratteri, anche se il percorso completo non dovrebbe essere più lungo di quello. C'è un bel tavolo su Wikipedia su questo: http://en.wikipedia.org/wiki/Filename .
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
w
). Così quello che ora?
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!
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.