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

36

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

Existe-t-il une solution technique? Pouvons-nous appuyer sur une sorte de commutateur dans Windows 7 et Windows 2008 R2 pour dire "Oui, ignorez simplement ces problèmes historiques et faites en sorte que le nom de chemin d'accès à +260 caractères fonctionne".

Post-scriptum J'ai lu et suis totalement non édifié par les noms de fichiers, chemins et espaces de noms

Christopher Edwards
la source
3
Nous sommes en 2018 et le problème existe toujours dans ROBOCOPY. 255 limite. Ceux qui le dépassent émettent simplement un bip mais ne les copient pas.
SDsolar
@SDsolar: utilisez-vous une ancienne version de robocopy?
Naikrovek
Oui, j'allais dire la même chose - il faut utiliser robocopy spécifiquement parce qu'il peut gérer de longs chemins ...
Rob Nicholson

Réponses:

12

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

sysadmin1138
la source
5
Un bogue dans un logiciel MS qui a été corrigé pour quelques versions d'OS, c'est un nouveau ...
Hubert Kario
2
Windows 10 1607 a finalement résolu le problème de navigation dans les fichiers et offre un peu de magie pour tromper les applications Win32 et leur permettre de travailler dans ce nouveau monde étrange aux chemins gigantesques: howtogeek.com/266621/…
HackSlash
28

Mentionnons 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 d'accès complet contient 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 substcommande comme suit:

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

Vous pouvez maintenant accéder (et supprimer, déplacer, etc.) au fichier de la manière suivante:

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, ce nom de fichier ne contient que ~ 235 caractères environ, vous ne rencontrerez donc plus le problème "Le nom du fichier est trop long".

Dans l'API Windows, il existe une constante infâme appelée MAX_PATH. MAX_PATH contient 260 caractères. Le système de fichiers NTFS prend en charge les chemins de fichiers comportant jusqu'à 32 767 caractères. Et vous pouvez toujours utiliser des noms de chemin longs de 32 767 caractères en accédant aux versions Unicode (ou "large") des fonctions de l'API Windows, ainsi qu'en préfixant le chemin \\?\.

MAX_PATHétait gravé dans la pierre il y a très longtemps 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, y compris celles écrites par Microsoft elles-mêmes. MAX_PATHet échouerait de nouvelles manières étranges si la constante était changée soudainement. (Débordement de tampon, corruption de tas, etc.)

Ryan Ries
la source
9
J'ai adopté une approche similaire à celle qui consiste à substutiliser des jonctions de répertoires, ce qui peut être plus pratique à nettoyer si vous souhaitez apporter quelques modifications rapides. J'utilise lien Shell Extension , mais vous pouvez simplement utiliser la mklinkcommande comme ceci: mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow".
Charles Grunwald
10

Vous pouvez contourner cette limitation en utilisant la notation \\? \ C:. C'est moche, mais ça supporte des fichiers allant jusqu'à 2 ^ 15.

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

Chris K
la source
2
Oui, j'ai lu ça, comme je l'ai dit (voir mon lien). Mais comment puis-je en profiter exactement? Puis-je mapper un lecteur sur \\? \ Quelque chose par exemple. Je ne comprends pas. Cet article est destiné aux programmeurs utilisant les API Windows. Bien que je code dans .NET selon les besoins, je n'utilise pas de C ++, etc., et je ne vois pas en quoi cela est pertinent pour le personnel de mes clients qui utilisent Windows Explorer et la boîte de dialogue de fichiers commune, etc.
Christopher Edwards
1
En fin de compte, il n'y en a pas. :-/ Tristement.
Chris K
@ChristopherEdwards Vous pouvez créer des jonctions vers des points plus bas dans la hiérarchie des dossiers.
Hubert Kario
1
@ChristopherEdwards vous pouvez créer un lien c:\usr-datavers `c: \ Users \ VeryLongUserName \ LongFolderName` et lui dire d'utiliser l'ancien, mais s'il nomme régulièrement les dossiers dans une quarantaine de caractères, cela ne changera rien ...
Hubert Kario
2
7-zip se fera un plaisir de parcourir et de copier en notation \\? \ C: pour ce que cela vaut.
Matt Lyons
9

Microsoft a maintenant un correctif disponible pour ce débutant avec Windows 10, qui est expliqué dans l' article MSDN sur les noms de fichiers, chemins d'accès et espaces de noms .

darthcoder a déjà répondu avec des détails sur le \\?\C:contournement de la notation, 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 de MAX_PATH pour un seul système. L'article mentionne également la prise en charge du contrôle de la stratégie de groupe Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long pathspour une implémentation d'organisation ou à l'échelle du groupe, si nécessaire.

JimNim
la source
Je n'ai pas encore eu le temps de procéder à des tests approfondis, mais cette solution ne donne toujours que des résultats mitigés. Je ne peux pas confirmer que le problème est résolu pour Windows [fichier] Explorer.
JimNim
2
Cela ne fonctionne pas dans l'explorateur de fichiers car, bien que le système et NTFS puissent gérer des chemins longs, l'explorateur ne le peut pas tant qu'il n'est pas lui-même recodé.
ingyhere
PS, vous devrez utiliser l’un des programmes de copie de ce lien SO au-dessus de Explorer pour que cela fonctionne réellement.
ingyhere
1
Bonne info! Je vais probablement m'en tenir à Robocopy dans ce cas.
JimNim