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 dans NTFS tel qu'utilisé par Windows XP ou 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 dans NTFS tel qu'utilisé par Windows XP ou Vista?
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, sous Windows, vous ne pouvez pas dépasser la MAX_PATH
valeur (259 caractères pour les fichiers, 248 pour les dossiers). Voirhttp://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 maximale de nom de fichier de plusieurs milliers de caractères (environ 30'000 quelque chose). Toutefois, Windows impose une longueur maximale de 260 pour le chemin d'accès + nom de fichier. Le dossier lecteur + contient au moins 3 caractères, vous vous retrouvez donc avec 257.
Voici ce que dit "l'exception non gérée" sur le framework 4.5 lorsque vous essayez d'enregistrer un fichier avec un nom de fichier long:
Le chemin spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier complet doit contenir moins de 260 caractères et le nom du répertoire doit contenir moins de 248 caractères.
199 sur Windows XP NTFS, je viens de vérifier.
Ce n'est pas de la théorie, mais simplement d'essayer mon ordinateur portable. Il peut y avoir des effets atténuants, mais physiquement, cela ne me permettra pas de l'agrandir.
Y a-t-il un autre paramètre qui limite cela, je me demande? Essayez-le par vous-même.
w
, supprimé cela et créé un dossier avec le même nom sur Windows 7 x64. Maintenant, la question est quel est le facteur limitant ici: la version NTFS, le système d'exploitation ou le sous-système ou l'API Win32 dans XP?
Selon MSDN , c'est 260 caractères. Il inclut "<NUL>"
le caractère nul de terminaison invisible, de sorte que la longueur réelle est de 259.
Mais lisez l'article, c'est un peu plus compliqué.
\\?\
préfixe requis au moment de l'exécution à une longueur non spécifiée. Le chemin d'accès doit rester inférieur à 32 767 octets après cette expansion.
La longueur dans NTFS est 255. Le NameLength
champ dans l' $Filename
attribut NTFS est un octet sans décalage; cela donne une plage de 0 à 255.
Le nom de fichier iself peut se trouver dans différents "espaces de noms". Jusqu'à présent, il existe: POSIX, WIN32, DOS et (WIN32DOS - lorsqu'un nom de fichier peut être nativement un nom DOS). (Étant donné que la chaîne a une longueur, elle pourrait contenir \ 0 mais cela entraînerait des problèmes et ne se trouve pas dans les espaces de noms ci-dessus.)
Ainsi, le nom d'un fichier ou d'un répertoire peut contenir jusqu'à 255 caractères. Lorsque vous spécifiez le chemin complet sous Windows, vous devez préfixer le chemin avec \\? \ (Ou utiliser \\? \ UNC \ server \ share pour les chemins UNC) pour marquer ce chemin comme un chemin de longueur étendue (~ 32 000 caractères) . Si votre chemin est plus long, vous devrez définir votre répertoire de travail en cours de route (ugh - effets secondaires dus au paramètre à l'échelle du processus).
255 caractères.
J'ajoute ceci à la réponse approuvée ci-dessus.
POUR ÊTRE CLAIR, la raison pour laquelle les gens pensent qu'il s'agit de 255 à 260 caractères est que c'est tout ce que Windows Explorer prend en charge. Cela entraînera une erreur en faisant quelque chose comme une copie de fichier sur des noms de fichiers plus longs 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 Explorer se plaint en premier lieu). La «solution recommandée» de Microsoft dans des situations comme celle-ci consiste à ouvrir le fichier dans le programme d'origine 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 existe 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
Cette partie de la documentation officielle indique clairement qu'il s'agit de 255 caractères Unicode pour NTFS, exFAT et FAT32 et 127 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.
WCHAR
éléments. Non, ce n'est pas des "caractères Unicode" (vérifiez votre terminologie Unicode: points de code, caractères etc ...!).
255 caractères, bien que le chemin complet ne devrait pas être plus long que cela. Il y a un joli tableau sur Wikipedia à ce sujet: http://en.wikipedia.org/wiki/Filename .
238! Je l'ai vérifié sous Win7 32 bits 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
w
). Et maintenant?
En fait, il est de 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 "sont une limitation de l'Explorateur, pas le système de fichiers lui-même. NTFS prend en charge des chemins jusqu'à 32 000 caractères Unicode, avec chaque composant jusqu'à 255 caractères.
L'Explorateur et l'API Windows vous limitent à 260 caractères pour le chemin d'accès, qui incluent la lettre de lecteur, les deux-points, les barres obliques de séparation et un caractère nul de fin. Il est possible de lire un chemin plus long dans Windows si vous le démarrez avec un
\\
"
Si vous lisez les articles 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 + extension dans WS 2012 Explorer plus de 224 caractères. Ne tirez pas sur le messager!
Dans le CMD du même serveur, je ne peux pas créer un nom de plus de 235 caractères:
Le système ne peut pas trouver le chemin spécifié.
Le fichier avec un nom de 224 caractères créé dans l'Explorateur ne peut pas être ouvert dans Notepad ++ - il vient juste avec un nouveau fichier à la place.
The system cannot find the path specified.
n'est pas le même que The specified path, file name, or both are too long.
. Je suppose que vous aviez une faute de frappe ou quelque chose. Vous obtenez ce message si vous essayez de créer un fichier dans un chemin qui n'existe pas ou si vous souhaitez vous déplacer dans une direction qui n'existe pas.