web-dev-qa-db-fra.com

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 dans NTFS utilisé par Windows XP ou Vista?

245
GateKiller

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 valeur MAX_PATH (259 caractères pour les fichiers, 248 pour les dossiers). Voir http://msdn.Microsoft.com/en-us/library/aa365247.aspx pour plus de détails.

269
Adam Rosenfield

Voici ce que dit "l'exception non gérée" dans Framework 4.5 lors de la tentative d'enregistrement d'un fichier avec un nom de fichier long:

Le chemin, le nom de fichier ou les deux spécifiés sont trop longs. Le nom de fichier complet doit contenir moins de 26 caractères et le nom de répertoire moins de 248 caractères.

screenshot

26
SturmCoder

C'est 257 caractères. Pour être précis: NTFS lui-même impose une longueur de fichier maximale de plusieurs milliers de caractères (environ 30 000). Toutefois, Windows impose une longueur maximale de 260 pour le chemin d'accès + le nom du fichier. Le lecteur + dossier prend au moins 3 caractères, vous obtenez donc 257.

25
Alphager

199 sous Windows XP NTFS, je viens de vérifier.

Ce n'est pas de la théorie mais d'essayer simplement mon ordinateur portable. Il peut y avoir des effets atténuants, mais physiquement, cela ne me permettra pas de l'agrandir.

Y at-il un autre paramètre limitant cela, je me le demande? Essayez par vous-même.

16
dove

Selon MSDN , il s'agit de 260 caractères. Il inclut "<NUL>" -le caractère nul de fin invisible, la longueur réelle est donc 259.

Mais lisez l'article, c'est un peu plus compliqué.

13
Kibbee

La longueur dans NTFS est 255. Le champ NameLength de l'attribut NTFS $Filename est un octet sans décalage; cela donne une plage de 0-255.

Le nom de fichier lui-même peut être 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). (Puisque la chaîne a une longueur, elle pourrait contenir\0 mais cela donnerait lieu à des problèmes et ne figure pas dans les espaces de noms ci-dessus.)

Ainsi, le nom d'un fichier ou d'un répertoire peut comporter jusqu'à 255 caractères. Lorsque vous spécifiez le chemin complet sous Windows, vous devez préfixez le chemin avec \\?\ (ou utilisez \\?\UNC\serveur\partage pour les chemins UNC) 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 défini pour l'ensemble du processus).

12
Dominik Weber
7
warren

J'ajoute ceci à la réponse approuvée ci-dessus.

Pour être clair, les gens croient qu'il s'agit de 255 à 260 caractères, car c'est tout ce que l'explorateur Windows prend en charge. Il y aura erreur de faire 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 obtiendrez des longueurs dont Explorer se plaint en premier lieu). Le "correctif recommandé" de Microsoft dans de telles situations consiste à ouvrir le fichier dans le programme d'origine qui l'a écrit et à le renommer.

4
std''OrgnlDave

Selon la nouvelle documentation du Kit de développement logiciel (SDK) de Windows (8.0), il semble qu'une nouvelle limite de chemin d'accès 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
3

Cette partie de la documentation officielle indique clairement qu'il s'agit de 255 caractères Unicode pour NTFS, exFAT et FAT32, ainsi que 127 Unicode ou 254 ASCII caractères 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 contenant pas plus de 255 caractères.

3
caw

255 caractères, même si le chemin complet ne doit pas être plus long. Il y a une belle table sur Wikipedia à ce sujet: http://en.wikipedia.org/wiki/Filename .

2
svinto