2009-12-07 24 views

risposta

20

La limitazione di 260 caratteri non è una limitazione del file system, ma dell'API Win32. Win32 definisce MAX_PATH come 260 che è ciò che l'API sta usando per controllare la lunghezza del percorso passato in funzioni come FileCreate, FileOpen, ecc. (Che sono usati da .NET nel BCL).

Tuttavia, è possibile ignorare le regole Win32 e creare percorsi fino a 32K caratteri. Fondamentalmente è necessario utilizzare la sintassi "\\? \ C: \ MyReallyLongPath \ File.txt" che potresti non aver visto prima. L'ultima volta che ho controllato, le classi File e FileInfo in .NET ti impedivano di utilizzare questo tipo di percorso, ma puoi sicuramente farlo da C/C++. Ecco un link per maggiori informazioni.

http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx

+0

Va notato che un API è stato introdotto con Windows 95 che fa percorsi di supporto più lunghi di 'caratteri MAX_PATH': l'API Shell. –

4

Citato da wikipedia

I nomi di file sono limitati a 255 UTF-16 parole in codice. Alcuni nomi sono riservati nella directory del volume e non possono essere utilizzati per i file . Questi sono: $ MFT, $ MFTMirr, $ LogFile, $ Volume, $ AttrDef,. (punto), $ Bitmap, $ Boot, $ BadClus, $ Secure, $ Upcase e $ Extend; [3]. (punto) e $ Extend sono entrambe le directory; gli altri sono file. Il kernel NT limita i percorsi completi a 32.767 codice UTF-16 parole.

http://en.wikipedia.org/wiki/NTFS

3

Doc. Dovresti certamente essere in grado di creare percorsi di file più lunghi di 255 byte, a condizione che ogni singolo componente del percorso sia sotto quello. Tuttavia è necessario utilizzare le versioni Unicode (W) delle chiamate di accesso ai file per ottenere questo comportamento; se stai usando le interfacce basate su byte ANSI (A) come quelle usate da stdio, resterai bloccato con le limitazioni della vecchia interfaccia di percorso pre-Unicode.