Limitation du nom de chemin de la fenêtre 256 caractères


17

après une longue recherche, j'ai finalement découvert que les chemins d'accès ne pouvaient pas dépasser 256 caractères, même dans le dernier Microsoft Windows 7. Je ne comprends vraiment pas pourquoi il y a une limitation aussi stupide, car NTFS peut gérer jusqu'à 32 000 caractères de chemin longueur sans aucun problème depuis plus d'une dizaine d'années! N'y a-t-il aucune possibilité de changer cela? Ou existe-t-il des solutions pratiques pour éviter cela?

260 caractères ne sont que très peu pour des cas d'utilisation même simples comme certains répertoires de photos imbriqués avec de longs noms de fichiers.


1
Je pense que l'inquiétude est qu'il existe des programmes plus anciens qui ont une idée codée en dur de la longueur d'un chemin, de sorte que si vous essayez de les utiliser sur des chemins plus longs, ils exploseront de manière intéressante.
dsolimano

Les systèmes d'exploitation Linux ont-ils ce problème?
ahorn

Réponses:


18

Selon Microsoft:

  • L'API Windows traditionnelle limite les noms de chemin à 260 caractères, même pour les applications développées pour la dernière version.

  • Les applications utilisant l'API Unicode peuvent utiliser une forme de chemin qui autorise jusqu'à 32 767 caractères. Le nom du fichier doit être préfixé \\?\et doit être un chemin absolu, par exemple, \\?\c:\dir\fileou \\?\UNC\server\share\file. Il existe d'autres limitations, voir la référence pour plus de détails.

Si vous avez réussi à créer et à utiliser une hiérarchie de fichiers approfondie et que vous devez travailler avec une application qui se bombarde en raison de la longueur du nom de fichier, vous pouvez essayer quelques choses:

  • Utilisez la mklinkcommande pour créer des liens symboliques et passez un chemin qui les utilise à votre application.

  • Utilisez la substcommande pour affecter une lettre de lecteur à un répertoire.

  • Démarrez votre application à partir d'un répertoire profond et passez-lui de courts chemins relatifs.

  • Remplacez certains noms longs par leurs alias 8.3 ( micros~1), en supposant que ceux-ci existent toujours dans Windows 7. Si vous avez à micros~1côté micros~2, je ne sais pas qui est lequel; peut-être exécuter DOS command.com(encore une fois, en supposant que Windows 7 peut toujours le faire).


3
Eh bien, même l'explorateur Windows de Win7 semble utiliser l'API traditionnelle! C'est dommage.

3
Encore plus de barres obliques inverses `\\? \` :-)
Anneau Ø

@Gilles, micros ~ 1 et micros ~ 2 sont-ils standardisés dans tous les systèmes ou est-ce aléatoire?
Pacerier

@Pacerier Quel que soit le répertoire créé en premier micros~1, il est donc essentiellement aléatoire.
Gilles 'SO- arrête d'être méchant'

0

Vous pouvez utiliser les noms courts (8.3) pour tous vos dossiers et fichiers.

Vous devez cependant vous assurer qu'ils sont activés.

Un nom de fichier long est considéré comme n'importe quel nom de fichier qui dépasse la convention de dénomination de style MS-DOS courte (également appelée 8.3). En règle générale, Windows stocke les noms de fichiers longs sur le disque en tant qu'entrées de répertoire spéciales, qui peuvent être désactivées à l'échelle du système pour des raisons de performances en fonction du système de fichiers particulier. Lorsque vous créez un nom de fichier long, Windows peut également créer une forme 8.3 courte du nom, appelée alias 8.3, et le stocker également sur le disque. Cet aliasing 8.3 peut être désactivé pour un volume spécifié.

(mon audacieux)

Vous devrez également écrire du code pour obtenir le nom court du nom long.

La source


2
lol ... Je me souviens très bien de ces jours dans Windows 95 où nous avons tous eu ce super duper FAT32 avec des noms de fichiers de 256 caractères! C'était fantastique (de nos jours) et je suis vraiment choqué que les limitations de nom de fichier puissent encore être un problème de nos jours. 2010! Windows est vraiment archaïque ...

0

Le nom de fichier / répertoire dans NTFS est limité à 255 points de code unicode, car la longueur est stockée sous forme d'octet. Mais il n'y a pas de limite inhérente à la longueur totale du chemin.

De nombreux appels à l'API Win32 (y compris le shell de l'explorateur) ont une limite de longueur de 260 - 1. Certains autres appels ont la possibilité d'utiliser le préfixe \\? \ Pour obtenir jusqu'à 32 Ko (un peu moins, car le nom du volume est substitué dans Kernel-land)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.