Was ist der längste Dateipfad, den Windows verarbeiten kann?

57

Was ist der längste Dateipfad, den Windows verarbeiten kann?

Ron Tuffin
quelle

Antworten:

48

Maximale Pfadlänge (von MSDN)

In der Windows-API (mit einigen Ausnahmen, die in den folgenden Abschnitten erläutert werden) beträgt die maximale Länge für einen Pfad MAX_PATH, der mit 260 Zeichen definiert ist . Ein lokaler Pfad ist in der folgenden Reihenfolge strukturiert: Laufwerkbuchstabe, Doppelpunkt, umgekehrter Schrägstrich, durch umgekehrte Schrägstriche getrennte Komponenten und ein abschließendes Nullzeichen. Beispielsweise ist der maximale Pfad auf Laufwerk D "D: \ <Pfadzeichenfolge mit 256 Zeichen> <NUL>", wobei "<NUL>" das unsichtbare abschließende Nullzeichen für die aktuelle Systemcodepage darstellt. (Die Zeichen <> werden hier aus Gründen der Übersichtlichkeit verwendet und können nicht Teil einer gültigen Pfadzeichenfolge sein.)

Adam Matan
quelle
4
Sie sollten erwähnen, dass Sie Pfade behandeln können, die diese Grenze überschreiten, indem Sie ihr das Präfix "\\?" Voranstellen (ich denke, es war diese Zeichenfolge).
Joey
3
Sie sollten auch die im 2. Absatz genannte Grenze für Unicode-Pfade
angeben
260? 256 Zeichen ohne Laufwerk: \ und Abschlusszeichen. Es ist 2009, warum bekommen wir nur ein Byte an Charakteren, mit denen wir herumspielen können?
Phoshi
@Phoshi Die APIs für die Verwendung längerer Pfade werden vom Betriebssystem standardmäßig nicht verwendet, da die Übergabe von beliebig langen Zeichenfolgen an Anwendungen, die von Entwicklern, die wussten, dass der Pfad nicht länger als 260 Zeichen sein kann, schlecht geschrieben wurde und beschlossen, eine feste Länge zuzuweisen Wenn Sie das Array halten, führt dies zu einer großen Anzahl von Pufferüberläufen, die zum Absturz und / oder zur Ausnutzung von Anwendungen führen. Etwas bessere Implementierungen von Entwicklern mit dem gleichen Missverständnis würden abgebrochen, da bei der Pfadvalidierung ein zu langer Fehler gemeldet wurde.
Dan Neely
15

XP-Dateipfad - 250 Zeichen

Vista-Dateipfad - 260 Zeichen

Der längste Pfad bei einer Neuinstallation von Windows XP beträgt 152 Zeichen.

Der längste Pfad für eine halbbereinigte Installation von Windows Vista beträgt 195 Zeichen:

In Windows XP sind Dateinamen mit einer Länge von bis zu 255 Zeichen zulässig

Windows Vista ermöglicht noch längere Dateinamen mit bis zu 260 Zeichen.

http://www.codinghorror.com/blog/archives/000729.html

Joe
quelle
5
Dies ist nur dann der Fall, wenn Sie nicht die Unicode-API verwenden, die das Limit ein wenig erweitert (~ 32k, siehe msdn.microsoft.com/en-us/library/… )
akira
1
Hmmm. bei dieser Geschwindigkeit sollte das Limit in Win7 bei 265 Zeichen liegen, oder?
Quack Quijote
Warum sollten sie das Limit um zehn Zeichen erhöhen? Scheint nicht wert, tut es: \
Phoshi
Das ist falsch. Die maximale Dateinamenlänge beträgt in jedem Windows noch 255 Zeichen, da dies das NTFS-Limit ist
phuclv
8

Die Windows-Konstante MAX_PATHist 260, wie andere Antworten besagen. Der längste Pfad ist jedoch 32767.

Sehen Sie hier .

32k ist zwar UNICODE, aber jetzt müssen wir es verwenden, also sollten wir auch eine solche maximale Pfadlänge verwenden.

Sie können auch einen Blick auf meine Antwort in SO werfen, in der einige Details zur maximalen Pfadlänge erläutert werden.

ST3
quelle
1

Das "klassische" Limit beträgt 260 Zeichen: drive letter+ :\+ 255 characters of filename+ \(oder zum Runden) + null terminatorwie in den anderen Antworten angegeben

Die tatsächliche interne Beschränkung liegt jedoch bei 32767 Zeichen, die durch Anhängen \\?\eines vollständig qualifizierten Pfads erreicht werden können

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 lpMaximumComponentLengthParameter der GetVolumeInformationFunktion 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:\very long path".

Wenn die vollständig qualifizierten Pfade aus bestimmten Gründen nicht verwendet werden können, können Sie auf tiefere Verzeichnisse zugreifen, indem Sie einen Laufwerksbuchstaben anhängen und subst/ diskpartoder eine Junction / einen Symlink erstellen , um den Pfad zu verkürzen

Seit Windows 10 wurde das MAX_PATHLimit ebenfalls entfernt, jedoch nicht standardmäßig

Ab Windows 10, Version 1607, wurden MAX_PATHEinschränkungen für allgemeine Win32-Datei- und -Verzeichnisfunktionen entfernt. Sie müssen sich jedoch für das neue Verhalten anmelden.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

phuclv
quelle