Die Frage lautet warum besteht die Einschränkung weiterhin. Sicherlich kann modernes Windows die Seite von MAX_PATH
um längere Pfade zu ermöglichen. Warum wurde diese Beschränkung nicht aufgehoben?
- Der Grund, warum sie nicht entfernt werden kann, ist, dass Windows versprochen hat, sie nie zu ändern.
Durch einen API-Vertrag hat Windows allen Anwendungen garantiert, dass die Standard-APIs für Dateien niemals einen Pfad zurückgeben, der länger als 260
Zeichen.
Bedenken Sie Folgendes richtig Code:
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows garantiert mein Programm, dass es meine Daten in die WIN32_FIND_DATA
Struktur:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
Meine Anwendung hat den Wert der Konstante nicht deklariert MAX_PATH
die Windows-API hat. Meine Anwendung verwendet diesen definierten Wert.
Meine Struktur ist korrekt definiert und ordnet nur 592
Bytes insgesamt. Das bedeutet, dass ich nur einen Dateinamen empfangen kann, der kleiner ist als 260
Zeichen. Windows versprochen Ich habe mir gesagt, wenn ich meine Bewerbung richtig schreibe, wird sie auch in Zukunft funktionieren.
Wenn Windows Dateinamen zulassen würde, die länger als 260
Zeichen, dann würde meine bestehende Anwendung (die die richtige API korrekt verwendet) fehlschlagen.
Für alle, die Microsoft auffordern, die MAX_PATH
Konstante, müssen sie zunächst sicherstellen, dass keine bestehende Anwendung ausfällt. Ich besitze und verwende zum Beispiel immer noch eine Windows-Anwendung, die für Windows 3.11 geschrieben wurde. Sie läuft immer noch unter 64-Bit-Windows 10. Das ist es, was Abwärtskompatibilität ausmacht.
Microsoft hat eine Möglichkeit zu schaffen, die vollen 32.768 Pfadnamen zu verwenden; dafür mussten sie jedoch einen neuen API-Vertrag erstellen. Zum einen sollten Sie die Shell-API zum Aufzählen von Dateien (da nicht alle Dateien auf einer Festplatte oder Netzwerkfreigabe vorhanden sind).
Sie dürfen aber auch nicht die bestehenden Anwendungen der Benutzer beeinträchtigen. Die große Mehrheit der Anwendungen hat no die Shell-API für die Arbeit mit Dateien verwenden. Jeder ruft einfach FindFirstFile
/ FindNextFile
und macht Schluss für heute.
9 Stimmen
@Artelius: Tatsächlich unterstützt Windows (zumindest ab Win2K) Kreuzungspunkte ( de.wikipedia.org/wiki/NTFS_Junction_point ), und ab Vista werden symbolische NT-Verknüpfungen ( de.wikipedia.org/wiki/NTFS_symbolischer_link ). Wie auch immer, während Symlinks helfen können, längere/verschachtelte Pfade freundlicher zu gestalten, kann ich mir nicht vorstellen, wie Symlinks helfen würden, wenn man an die Grenzen der Pfadlänge stößt.
1 Stimmen
Auf meinem Windows 8 PC scheint die Grenze bei etwa 1024 Zeichen zu liegen, also YMMV.
10 Stimmen
Selbst wenn es diese Grenze nicht gäbe, gibt es immer noch viele andere Grenzen, und jede von ihnen könnte irgendwann lästig werden. Der Punkt ist, warum ist diese Grenze so niedrig? Nach der Ära von 8.3 und mit Mega-/Giga-Hardware sollte ein Pfad nun ein dynamisch zugewiesener String mit einer praktisch unbegrenzten Größe sein.
2 Stimmen
Bewältigung: Die Windows-Fehlermeldungen könnten besser sein. Ich habe gerade die Fehlermeldung "cannot find file..." (zweimal), als ich versuchte, eine Excel-Tabelle in einem langen Verzeichnis zu öffnen, nachdem ich eine Zip-Datei in meinem Downloads-Verzeichnis entpackt hatte. Die Fehlermeldung sollte sich eher darauf beziehen, dass versucht wird, einen Pfad zu verwenden, der MAX_PATH überschreitet, oder sie sollte einen abgeschnittenen Dateinamen anzeigen, anstatt den gesamten zu langen Namen.
17 Stimmen
Microsoft hat dieses Problem in Windows 10 Build 14352 endlich in Angriff genommen.
0 Stimmen
@WarrenP Sie meinen dies? stackoverflow.com/q/27680647/1157054
3 Stimmen
Ja, und es sieht so aus, als müssten Sie das App-Manifest ändern, damit es den langen Pfad erkennt.
3 Stimmen
@PatrickSzalapski leider wurde es behoben visualstudio.uservoice.com/forums/121579-visual-studio/
2 Stimmen
Mit dem \\ ?\ Präfix konnten wir bereits 32k lange Pfade verwenden, wahrscheinlich seit NT3.5
2 Stimmen
@WarrenP Leider hat Microsoft die Windows Explorer UI App nie aktualisiert, so dass das Problem auch heute noch im Jahr 2022 besteht.
1 Stimmen
@v.oddou Verwendung des \\ ?\ funktioniert auch nicht, da die Windows Explorer App sie vor dem Aufruf der älteren WIN32 API, die sie zum Aufzählen von Ordnern oder Öffnen von Dateien verwendet, entfernt.