web-dev-qa-db-fra.com

Fenêtre 256 caractères Nom du chemin Limitation

après une longue recherche, j'ai finalement découvert que les noms de matchs ne peuvent pas être plus longs que 256 caractères, même dans la dernière 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. Longueur sans aucun problème depuis plus d'une douzaine d'années! N'y a-t-il aucune possibilité de changer cela? Ou y a-t-il des solutions pratiques pour éviter cela?

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

18
nils

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 axée sur unicode peuvent utiliser une forme de chemin qui permet de passer de 32767 caractères maximum. Le nom du fichier doit être préfixé avec \\?\, et doit être un chemin absolu, par exemple, \\?\c:\dir\file ou \\?\UNC\server\share\file. Il y a 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 profonde et que vous devez travailler avec une application qui bombe en raison de la longueur du nom de fichier, il y a quelques éléments que vous pouvez essayer:

  • Utilisez la commande mklink Commande pour créer Liens symboliques et transmettez un chemin qui les utilise sur votre application.

  • Utilisez la commande - subst Commande pour attribuer une lettre de lecteur à un répertoire.

  • Démarrez votre application dans un répertoire profond et passez des chemins relatifs courts courts.

  • Remplacer quelques noms longs par leurs 8,3 alias (micros~1), en supposant que ceux-ci existent toujours sous Windows 7. Si vous avez micros~1 aux côtés de micros~2, Je ne sais pas comment dire lequel est lequel; Peut-être exécuter DOS command.com (Encore une fois, en supposant que Windows 7 puisse toujours le faire).

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

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

Un nom de fichier long est considéré comme n'importe quel nom de fichier dépassant la convention de dénomination de type MS-DOS (également appelée 8.3). En règle générale, Windows stocke les noms de fichiers longs sur le disque en tant qu'entries de répertoire spéciaux, pouvant être désactivé Systemwide pour des raisons de performances en fonction du système de fichiers concerné. Lorsque vous créez un nom de fichier long, Windows peut également créer une forme courte 8.3 du nom, appelée Alias ​​8.3, et le stocker sur le disque également. 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 abrégé du nom long.

source

0
ChrisF

Le nom de fichier/répertoire dans NTFS est limité à 255 codes de code Unicode, car la longueur est stockée en octets. Mais il n'y a pas de limite inhérente de la longueur totale du chemin.

De nombreux appels d'API Win32 (y compris les appels d'Explorateur Shell) ont la limite de 260 à 1 de longueur. Certains autres appels ont la capacité d'utiliser le \\?\Préfixe pour atteindre 32k (un peu moins, car le nom de volume est substitué dans le noyau-terre)

0
Dominik Weber