web-dev-qa-db-fra.com

Surmonter les restrictions de longueur de chemin de fichier maximale dans Windows

Un de nos clients utilise habituellement des noms de chemin très longs (plusieurs dossiers imbriqués, avec des noms longs) et nous rencontrons régulièrement des "problèmes de formation des utilisateurs" afin de raccourcir le chemin à moins de 260 caractères.

Y a-t-il une solution technique disponible, pouvons-nous actionner une sorte de commutateur dans Windows 7 et Windows 2008 R2 pour dire "ouais ignorer ces problèmes historiques et faire fonctionner le nom de chemin de +260 caractères".

P.S. J'ai lu et été totalement non édité par Nommer des fichiers, des chemins et des espaces de noms

36
Christopher Edwards

Les méthodes sont là, mais jusqu'à ce que Microsoft recode le widget navigateur de fichiers, nous sommes à peu près coincés avec ce vieux problème. C'est sous-optimal, mais c'est comme ça que ça fonctionne.

12
sysadmin1138

Je mentionne juste un truc que je ne vois pas encore mentionné ici.

Prenez ce fichier par exemple:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Ce chemin de fichier complet comporte 290 caractères. Le shell (Explorateur Windows) et la plupart des utilitaires de ligne de commande ne vous permettront probablement pas de le toucher.

Utilisez la commande subst comme ceci:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

Vous pouvez maintenant accéder au fichier (et le supprimer, le déplacer, etc.) ainsi:

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Et maintenant que le nom de fichier ne compte que ~ 235 caractères environ, vous ne rencontrerez plus les problèmes "Le nom de fichier est trop long".

Dans l'API Windows, il existe une constante tristement célèbre appelée MAX_PATH. MAX_PATH est de 260 caractères. Le système de fichiers NTFS prend en charge en fait des chemins de fichiers contenant jusqu'à 32 767 caractères. Et vous pouvez toujours utiliser des noms de chemin d'accès longs de 32 767 caractères en accédant aux versions Unicode (ou "large") des fonctions de l'API Windows, et également en préfixant le chemin avec \\?\.

MAX_PATH a été gravé dans le marbre il y a très longtemps fois dans le monde Windows. Je pense que cela a quelque chose à voir avec les normes ANSI à l'époque ... mais c'est une de ces choses qu'il est très difficile pour Microsoft de changer maintenant, car nous avons maintenant des milliers de programmes et d'applications, dont certains écrits par Microsoft eux-mêmes, qui utilisent MAX_PATH et échouerait de nouvelles façons étranges si la constante était soudainement changée. (Débordements de tampon, corruption de tas, etc.)

28
Ryan Ries

Vous pouvez contourner cette limitation en utilisant la notation \\?\C :. C'est moche, mais il prend en charge des longueurs de fichier allant jusqu'à 2 ^ 15.

http://msdn.Microsoft.com/en-us/library/aa365247 (v = vs.85) .aspx # maxpath

10
Chris K

Microsoft a maintenant un correctif disponible pour ce début avec Windows 10, qui est expliqué dans l'article MSDN Naming Files, Paths and Namespaces .

darthcoder a déjà répondu avec des détails sur la solution de contournement de la notation \\?\C:, mais il existe maintenant une clé de registre à HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD) qui peut être utilisée pour supprimer les limitations MAX_PATH pour un seul système. L'article mentionne également la prise en charge du contrôle de stratégie de groupe à Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths Pour une organisation ou une implémentation à l'échelle du groupe si nécessaire.

9
JimNim