Während NTFS Pfade mit einer Länge von 32.000 Zeichen zulässt, haben Sie die Pfadlängenbeschränkung von 259 Zeichen der Win32-API gefunden .
In der Windows-API (mit einigen im [verlinkten Dokument] behandelten Ausnahmen) beträgt die maximale Länge für einen Pfad MAX_PATH
260 Zeichen.
(Zusätzlich wird ein NULL
Abschlusszeichen an den Pfad angehängt, das uns 259 verwendbare Zeichen gibt.)
Da Explorer (und fast alle anderen Windows-Apps) für den Dateisystemzugriff auf die Win32-API angewiesen sind, ist es nicht sinnvoll , diese Einschränkung zu umgehen, obwohl dies möglich ist :
Die Windows-API verfügt über viele Funktionen, die auch über Unicode-Versionen verfügen, um einen Pfad mit erweiterter Länge für eine maximale Gesamtpfadlänge von 32.767 Zeichen zuzulassen. Dieser Pfadtyp setzt sich aus durch Backslashes getrennten Komponenten zusammen, die jeweils bis zu dem im lpMaximumComponentLength
Parameter der GetVolumeInformation
Funktion zurückgegebenen Wert (dieser Wert besteht normalerweise aus 255 Zeichen) reichen. Verwenden Sie das Präfix "\\? \", Um einen Pfad mit erweiterter Länge anzugeben. Zum Beispiel "\\? \ D: \ sehr langer Pfad ".
Leider können Sie nicht einfach \\?\D:\very long path
in ein Explorer-Fenster eingeben. Die Anwendung muss so konzipiert sein, dass sie diese APIs nutzt und sehr lange Pfadnamen verarbeitet.
Eine Möglichkeit, unter Windows auf Pfade mit erweiterter Länge zuzugreifen, ist die Installation von Cygwin , einer * nix-Emulationsebene für Windows. In meinen Tests scheint Cygwin nicht eingeschränkt zu seinMAX_PATH
; Bash und Vi hatten keine Probleme mit Pfaden mit einer Länge von 2.000 Zeichen.
Beachten Sie, dass Sie mit bash zwar Pfade mit erweiterter Länge durchsuchen können, in normalen Windows-Anwendungen jedoch möglicherweise keine Dateien in diesen Pfaden öffnen können. Wenn Sie beispielsweise eingeben, notepad
während das Arbeitsverzeichnis ein Pfad mit erweiterter Länge ist, erhalten Sie
Fehler: Das aktuelle Arbeitsverzeichnis hat einen längeren Pfad als für ein Win32-Arbeitsverzeichnis zulässig. Die native Windows-Anwendung kann hier nicht gestartet werden.
Und versuchen notepad "\\?\D:\very long path\file.txt"
funktioniert auch nicht; es wird gestartet, sagt aber nur "Datei kann nicht gefunden werden ..." Wenn Sie das Gleiche mit Notepad ++ versuchen, stürzt es ab. (Wahrscheinlich ein Pufferüberlauf.)
Sie können auch auf bestimmte Dateien zugreifen, die tief in einem Pfad mit erweiterter Länge vergraben sind, indem Sie den Pfad selbst verkürzen, indem Sie einen NTFS- Junction-Punkt erstellen . An einer Eingabeaufforderung mit erhöhten Rechten:
D:\> mklink /J jct "\\?\D:\very\long\path"
Sie können jetzt auf den Inhalt von D:\very\long\path\
von zugreifen D:\jct\
. Sie werden keine Probleme mit der Pfadlänge haben, da der Pfad für Explorer und andere Apps einfach ist D:\jct\
(oder was auch immer). Der NTFS-Treiber leitet den Pfad (den "Analysepunkt") transparent um.
Der Nachteil dieses Ansatzes ist offensichtlich, dass Sie eine Junction in der Nähe der Datei erstellen müssen, auf die Sie zugreifen möchten. Sie können immer noch nicht einfach die gesamte Verzeichnisstruktur durchsuchen.
In Bezug auf Sonderzeichen ( " * : < > ? \ |
) ist das einfach ein No-Go. Diese Zeichen haben in Windows eine besondere Bedeutung. Sie können daher nicht in Pfaden verwendet werden. (Mit Cygwin können Sie Dateien mit Sonderzeichen erstellen . Dies geschieht jedoch, indem Sie die Zeichen durch Unicode-Sonderzeichen ersetzen, die dann beim Lesen ersetzt werden. Das Anzeigen dieser von Cygwin erstellten Dateien unter Linux oder im Explorer würde da nicht richtig aussehen Die Unicode-Zeichen würden nicht zurückgesetzt.)
Alles in allem, was machst du, was sehr lange Wege erfordert? Vielleicht könnten Sie Ihr Leben einfacher machen, indem Sie Ihre Aktivitäten neu bewerten und lange Wege vermeiden. Wahrscheinlich brauchen Sie sowieso keine so langen Wege .