Überwindung der Beschränkungen der maximalen Dateipfadlänge in Windows

36

Einer unserer Kunden verwendet üblicherweise sehr lange Pfadnamen (mehrere verschachtelte Ordner mit langen Namen), und es treten routinemäßig "Probleme mit der Benutzererziehung" auf, um den Pfad auf weniger als 260 Zeichen zu verkürzen.

Gibt es eine technische Lösung, können wir in Windows 7 und Windows 2008 R2 eine Art Schalter betätigen, um zu sagen: "Ja, ignorieren Sie einfach diese historischen Probleme und lassen Sie den Pfadnamen mit +260 Zeichen funktionieren."

PS: Ich habe Dateien, Pfade und Namespaces gelesen und bin völlig unbearbeitet

Christopher Edwards
quelle
3
Hier sind wir im Jahr 2018 und das Problem besteht immer noch in ROBOCOPY. 255 limit. Diejenigen, die darüber hinausgehen, piepen einfach, kopieren aber nicht.
SDsolar
@ SDsolar: Verwenden Sie eine alte Version von Robocopy?
Naikrovek
Ja, wollte dasselbe sagen - man muss Robocopy speziell verwenden, weil es lange Wege bewältigen kann ...
Rob Nicholson

Antworten:

12

Die Methoden sind vorhanden, aber bis Microsoft das Dateibrowser-Widget neu codiert, bleiben wir mit diesem alten Problem ziemlich fest. Es ist nicht optimal, aber so funktioniert es.

sysadmin1138
quelle
5
Fehler in MS-Software, die für einige Betriebssystemversionen behoben wurde, ist neu ...
Hubert Kario
2
Windows 10 1607 behebt endlich das Problem mit dem Dateibrowser und hat einige Zauberkünste, um Win32-Anwendungen an die Arbeit in dieser seltsamen neuen Welt der riesigen Pfade heranzuführen
HackSlash
28

Nur einen Trick erwähnen, den ich hier noch nicht gesehen habe.

Nehmen Sie diese Datei zum Beispiel:

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

Dieser vollständige Dateipfad ist 290 Zeichen lang. Die Shell (Windows Explorer) und die meisten Befehlszeilenprogramme lassen Sie wahrscheinlich nicht berühren.

Verwenden Sie den substBefehl wie folgt:

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

Jetzt können Sie auf folgende Weise auf die Datei zugreifen (und sie löschen, verschieben usw.):

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

Und jetzt ist dieser Dateiname nur noch ~ 235 Zeichen oder so, sodass Sie nicht mehr auf die Probleme "Dateiname ist zu lang" stoßen.

In der Windows-API gibt es eine berüchtigte Konstante namens MAX_PATH. MAX_PATH besteht aus 260 Zeichen. Das NTFS-Dateisystem unterstützt Dateipfade mit bis zu 32.767 Zeichen. Sie können weiterhin Pfadnamen mit einer Länge von 32.767 Zeichen verwenden, indem Sie auf die Unicode-Versionen (oder "Wide" -Versionen) der Windows-API-Funktionen zugreifen und dem Pfad das Präfix voranstellen \\?\.

MAX_PATHwurde vor sehr langer Zeit in der Windows-Welt in Stein gemeißelt . Ich denke, es hat etwas mit ANSI-Standards zu tun ... aber es ist eines der Dinge, die für Microsoft sehr schwierig sind, jetzt zu ändern, da wir jetzt Tausende von Programmen und Anwendungen haben, einschließlich einiger von Microsoft selbst geschriebener Programme, die diese verwenden MAX_PATHund würde auf seltsame Weise versagen, wenn die Konstante plötzlich geändert würde. (Pufferüberlauf, Heap-Beschädigung usw.)

Ryan Ries
quelle
9
Ich habe einen ähnlichen Ansatz gewählt wie die substVerwendung von Verzeichnis-Junctions. Dies ist möglicherweise einfacher zu bereinigen, wenn Sie nur ein paar schnelle Änderungen vornehmen möchten. Ich benutze Link - Shell - Erweiterung , aber Sie können nur die Verwendung mklinkBefehl wie folgt: mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow".
Charles Grunwald
10

Sie können diese Einschränkung umgehen, indem Sie die \\? \ C: -Notation verwenden. Es ist hässlich, aber es unterstützt Dateilängen bis zu 2 ^ 15.

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

Chris K
quelle
2
Ja, ich habe das wie gesagt gelesen (siehe meinen Link). Aber wie kann ich genau davon profitieren? Kann ich beispielsweise ein Laufwerk \\? \ Zuordnen. Ich verstehe nicht Der Artikel richtet sich an Programmierer, die Windows-APIs verwenden. Während ich bei Bedarf Code in .NET schreibe, verwende ich kein C ++ usw. und kann nicht erkennen, wie wichtig dies für die Mitarbeiter meiner Kunden ist, die Windows Explorer und den allgemeinen Dateidialog usw. verwenden.
Christopher Edwards
1
Letztendlich gibt es keine. : - / Leider.
Chris K
@ChristopherEdwards Sie können Verknüpfungen zu Punkten erstellen, die in der Ordnerhierarchie niedriger sind.
Hubert Kario
1
@ChristopherEdwards Sie könnten einen Link c:\usr-datazu `c: \ Users \ VeryLongUserName \ LongFolderName` erstellen und ihm sagen, dass er den ersteren verwenden soll, aber wenn er regelmäßig Ordner mit 40 Zeichen benennt, hilft das nichts ...
Hubert Kario
2
7-zip browst und kopiert gerne in \\? \ C: Notation, für was es sich lohnt.
Matt Lyons
9

Microsoft verfügt jetzt über ein Update für dieses Problem ab Windows 10, das im MSDN-Artikel zum Benennen von Dateien, Pfaden und Namespaces erläutert wird .

darthcoder hat bereits mit Details zur \\?\C:Notationsumgehung geantwortet , aber es gibt jetzt einen Registrierungsschlüssel, mit HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)dem die MAX_PATH-Einschränkungen für ein einzelnes System entfernt werden können. Der Artikel erwähnt auch die Unterstützung der Gruppenrichtliniensteuerung Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long pathsfür die Organisation oder die gruppenweite Implementierung, falls erforderlich.

JimNim
quelle
Ich hatte keine Zeit für gründliche Tests, aber ich habe bisher gemischte Ergebnisse mit dieser Lösung gesehen und kann nicht bestätigen, dass dies das Problem für den Windows [Datei] -Explorer löst.
JimNim
2
Dies funktioniert im Datei-Explorer nicht, da das System und NTFS zwar lange Pfade verarbeiten können, der Explorer dies jedoch nicht, bis er selbst neu codiert wurde.
am
PS, Sie müssen eines der Kopierprogramme in diesem SO-Link über Explorer verwenden, damit es tatsächlich funktioniert.
Ingyhere
1
Gute Infos! Ich werde mich in diesem Fall wahrscheinlich nur an Robocopy halten.
JimNim