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_PATHvalore (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 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).
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.
WCHARelementi. 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.