Longueur maximale du nom de fichier en NTFS (Windows XP et Windows Vista)?
Je conçois une table de base de données qui contiendra les noms de fichiers des fichiers téléchargés. Quelle est la longueur maximale d'un nom de fichier en NTFS tel qu'utilisé par Windows XP ou Vista?
14 réponses
Les composants individuels d'un nom de fichier (c'est-à-dire chaque sous-répertoire le long du chemin et le nom de fichier final) sont limités à 255 caractères, et la longueur totale du chemin est limitée à environ 32 000 caractères. Cependant, vous devriez généralement essayer de limiter la longueur des chemins à moins de 260 caractères (MAX_PATH
) lorsque cela est possible. Voir http://msdn.microsoft.com/en-us/library/aa365247.aspx pour plus de détails.
C'est 257 caractères. Pour être précis: NTFS lui-même impose une longueur de nom de fichier maximale de plusieurs milliers de caractères (environ 30 ' 000 quelque chose). Cependant, Windows impose une longueur maximale de 260 pour le chemin + nom de fichier. Le dossier drive + prend au moins 3 caractères, donc vous vous retrouvez avec 257.
Obtenu ceci sur framework 4.5 lorsque vous essayez d'enregistrer le fichier.
199 sur Windows XP NTFS, je viens de vérifier.
Ce n'est pas de la théorie mais juste d'essayer sur mon ordinateur portable. Il peut y avoir des effets atténuants, mais cela ne me permettra pas physiquement de le rendre plus grand.
Y a-t-il un autre paramètre limitant cela, je me demande? Essayez par vous-même.
La longueur en NTFS est 255. Le champ NameLength
dans L'attribut NTFS $Filename
est un octet sans décalage; cela donne une plage de 0 à 255.
Le nom de fichier iself peut être dans différents "espaces de noms". Jusqu'à présent, il y a: POSIX, WIN32, DOS et (WIN32DOS - quand un nom de fichier peut être nativement un nom DOS). (Puisque la chaîne a une longueur, elle pourrait contenir \0 mais cela céderait à des problèmes et n'est pas dans les espaces de noms ci-dessus.)
Ainsi, le nom d'un fichier ou d'un répertoire peut contenir jusqu'à 255 caractère. Lorsque vous spécifiez le chemin complet sous Windows, vous devez préfixer le chemin avec \\?\ (ou utiliser \\?\UNC \ server \ share for UNC paths) pour marquer ce chemin comme un chemin de longueur étendue (~32k caractères). Si votre chemin est plus long, vous devrez définir votre répertoire de travail en cours de route (effets secondaires dus au paramètre à l'échelle du processus).
J'ajoute ceci à la réponse approuvée ci-dessus.
Pour être clair, la raison pour laquelle les gens croient qu'il s'agit de 255-260 caractères est parce que C'est tout ce que Windows Explorer prend en charge. Il va erreur de faire quelque chose comme une copie de fichier sur les noms de fichiers plus longtemps que cela. Cependant, un programme peut lire et écrire des noms de fichiers beaucoup plus longs (c'est ainsi que vous obtenez des longueurs dont L'explorateur se plaint en premier lieu). Le "correctif recommandé" de Microsoft dans des situations comme celle - ci est d'ouvrir le fichier dans le programme original qui l'a écrit et le renommer.
Selon la nouvelle documentation du SDK Windows (8.0), il semble qu'une nouvelle limite de chemin soit fournie. Il y a un nouvel ensemble de fonctions de gestion de chemin et une définition de PATHCCH_MAX_CCH comme suit:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
255 caractères, bien que le chemin complet ne devrait pas être plus long que cela. Il y a une belle table sur Wikipedia à ce sujet: http://en.wikipedia.org/wiki/Filename .
Cette partie de la documentation officielle indique clairement qu'il s'agit de 255 caractères Unicode pour NTFS, exFAT et FAT32, et 127 caractères Unicode ou 254 caractères ASCII pour UDF.
En dehors de cela, la longueur maximale du nom de chemin est toujours de 32 760 caractères Unicode, chaque composant de chemin ne dépassant pas 255 caractères.
238! Je l'ai vérifié sous Win7 32 bit avec le script bat suivant:
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
En fait c'est 256, voir Comparaison des fonctionnalités du système de fichiers, limites.
Pour répéter un message sur http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html
"en supposant que nous parlons de NTFS et non de FAT32 ,les" 255 caractères pour le chemin+fichier" est une limitation de l'Explorateur, pas le système de fichiers lui-même. NTFS prend en charge les chemins d'accès jusqu'à 32 000 caractères Unicode composant jusqu'à 255 caractère.
Explorer - et L'API Windows-vous limite à 260 caractères pour le chemin, qui comprennent la lettre de lecteur, deux-points, séparant les barres obliques et un terminer le caractère nul. Il est possible de lire un chemin plus long dans Windows si vous démarrez avec un
\\
"
Si vous lisez les messages ci-dessus, vous verrez qu'il y a une 5ème chose dont vous pouvez être certain: Trouver au moins un utilisateur d'ordinateur obstiné!
Je ne peux pas créer un fichier avec le nom + période+extnesion dans WS 2012 Explorer plus long que 224 personnages. Ne tirez pas sur le messager!
Dans le CMD du même serveur, Je ne peux pas créer un plus long que 235 Nom du caractère:
Le système ne peut pas trouver le chemin spécifié.
Le fichier avec un nom de caractère 224 créé dans L'Explorateur ne peut pas être ouvert dans Notepad++ - il vient juste avec un nouveau fichier à la place.