Die Frage ist, warum die Einschränkung noch besteht. Sicherlich können moderne Windows die Seite vergrößern MAX_PATH
, um längere Pfade zu ermöglichen. Warum wurde die Einschränkung nicht aufgehoben?
- Der Grund, warum es nicht entfernt werden kann, ist, dass Windows versprochen hat, dass es sich niemals ändern wird.
Durch den API-Vertrag hat Windows allen Anwendungen garantiert, dass die Standard-Datei-APIs niemals einen Pfad zurückgeben, der länger als 260
Zeichen ist.
Betrachten Sie den folgenden korrekten Code:
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows garantierte meinem Programm, dass es meine WIN32_FIND_DATA
Struktur füllen würde :
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 jedoch. Meine Anwendung hat diesen definierten Wert verwendet.
Meine Struktur ist korrekt definiert und weist nur die 592
Gesamtzahl der Bytes zu. Das bedeutet, dass ich nur einen Dateinamen erhalten kann, der weniger als 260
Zeichen enthält. Windows versprach mir, dass meine Anwendung auch in Zukunft funktionieren würde, wenn ich meine Anwendung richtig schreiben würde.
Wenn Windows Dateinamen länger als 260
Zeichen zulässt, schlägt meine vorhandene Anwendung (die die richtige API korrekt verwendet hat) fehl.
Wenn Microsoft die MAX_PATH
Konstante ändern soll , muss zunächst sichergestellt werden, dass keine vorhandene Anwendung fehlschlägt. Zum Beispiel besitze und verwende ich immer noch eine Windows-Anwendung, die für die Ausführung unter Windows 3.11 geschrieben wurde. Es läuft immer noch unter 64-Bit-Windows 10. Genau das bringt Ihnen die Abwärtskompatibilität.
Microsoft hat eine Möglichkeit geschaffen, die vollständigen 32.768 Pfadnamen zu verwenden. Dafür mussten sie jedoch einen neuen API-Vertrag erstellen. Zum einen sollten Sie die Shell-API verwenden, um Dateien aufzulisten (da nicht alle Dateien auf einer Festplatte oder einer Netzwerkfreigabe vorhanden sind).
Sie müssen aber auch vorhandene Benutzeranwendungen nicht beschädigen. Die überwiegende Mehrzahl der Anwendungen nicht nicht verwenden , um das Shell - api für Kleinarbeit. Jeder ruft einfach anFindFirstFile
/ an FindNextFile
und nennt es einen Tag.