Komfortabler Dateimanager mit vielen Funktionen

Mehr zu #undef MAX_PATH

By Sven on 13.12.2007 - 21:25 in SpeedCommander 12

Ich habe einmal ein paar Fragen und Antworten zur MAX_PATH-Geschichte zusammengestellt.

Was ist MAX_PATH?

MAX_PATH ist eine Konstante aus dem Windows-SDK und definiert die maximal mögliche Länge eines Dateinamens. Der Wert von MAX_PATH beträgt 260, d.h. ein gültiger Dateiname für die Windows-API darf maximal 260 Zeichen enthalten. Die meisten Programme arbeiten deshalb mit festen Puffern von 260 Zeichen, wenn es um Dateinamen geht.

Ich habe aber schon längere Dateinamen gesehen. Wie geht das denn?

Die maximal möglichen 260 Zeichen gelten für den vollständigen Dateinamen inklusive Laufwerksbezeichnung. Wenn man sich eine etwas tiefer gelegene Netzwerkfreigabe als neuen Laufwerksbuchstaben einrichtet, dann kann man ab dieser Freigabe wieder mit 260 Zeichen arbeiten. Kopiert man nun Dateien mit sehr tiefen Ordnerstrukturen in diese Freigabe, dann kann man diese problemlos verwalten, aber auf dem Rechner mit der Freigabe kommt man aber nicht mehr bis an das Ende der Struktur. Viele Programme zeigen dann die Fehlermeldung „Der Dateiname oder die Erweiterung ist zu lang.“ an.

Wie umgeht SpeedCommander diese Beschränkung in Zukunft?

Die Unicode-Versionen vieler Windows-Funktionen können Dateinamen mit bis zu 32000 Zeichen verarbeiten, wobei eine einzelne Komponente maximal 255 Zeichen lang sein kann. Durch Voranstellung des Präfixes \\?\ vor dem Dateinamen kann die Beschränkung auf 260 Zeichen aufgehoben werden. Statt dem bisher gewohnten Dateinamen C:\Windows\explorer.exe verwendet man einfach \\?\C:\Windows\explorer.exe. Bei UNC-Namen gilt \\?\UNC\Server\Freigabe anstatt \\Server\Freigabe.

Muss ich das Präfix nun auch immer voranstellen?

Nein, für den Anwender ändert sich nichts. SpeedCommander verwendet das Präfix nur intern, der Anwender sieht weiterhin die gewohnten Datei- und Ordnernamen.

Die Windows-Shell kann aber nur Dateinamen mit bis zu 260 Zeichen verarbeiten. Was nun?

Die meisten Shell-Funktionen (z.B. SHGetFileInfo und SHFileOperation) sowie die Shell-Interfaces (z.B. IShellFolder und IContextMenu) kommen nur mit Dateinamen mit maximal 260 Zeichen klar. Das heißt, dass es für Dateinamen mit mehr als 260 Zeichen keine Vorschaubilder oder Informationen von Spaltenerweiterungen gibt. Die Anzeige des Kontextmenüs, Drag&Drop sowie das Löschen in den Papierkorb ist für diese Dateinamen ebenfalls nicht möglich. Ab Windows Vista kann die Shell auch mit sehr tiefen Ordnerstrukturen umgehen (bis zu 26 Unterverzeichnisse, wenn die Ordnernamen jeweils mehr als 8 Zeichen lang sind, bei kürzeren Ordnernamen sind noch mehr Stufen möglich).

Welche Funktionen bleiben auf 260 Zeichen beschränkt?

Alle wichtigen Funktionen in SpeedCommander, FileSearch und FileSync können mit Dateinamen von bis zu 32000 Zeichen umgehen. Für Archive gibt es vorerst weiterhin ein Limit von 260 Zeichen, es ist aber geplant, dieses Limit zumindestens für Archivdateien aufzuheben. Innerhalb der Archive bleibt die Beschränkung auf 260 Zeichen aber bestehen. Weiterhin gilt das Limit für

  • das Programmverzeichnis von SpeedCommander inkl. seiner Komponenten
  • das Verzeichnis mit den Einstellungsdateien
  • die Schnellansicht für Multimedia, Internet Explorer und Schriftarten
  • sämtliche Shell-Aufrufe (Vorschaubilder, Spaltenerweiterungen, Drag&Drop, Kontextmenü, Löschen in den Papierkorb)
  • das Starten von Anwendungen
  • die Auswahl von Dateinamen über Öffnen-/Speichern-Dialoge sowie der Ordnerauswahl-Dialog 

Genug erzählt. Gib uns endlich den Downloadlink!

Die Abkehr von der 260-Zeichen-Begrenzung hat naturgemäß viele Veränderungen in den Programmfunktionen nach sich gezogen, die natürlich erst einmal von den festen Betatestern umfassend getestet werden müssen. Die Freigabe der Version 12.10 ist für das erste Quartal 2008 geplant.

Es gibt 4 Kommentare zu diesem Beitrag

Trackback URL | RSS-Feed für Kommentare

  1. meh sagt:

    Vorsicht! MAX_PATH definiert NICHT ganz generell „die maximal mögliche Länge eines Dateinamens“! Die ist vom zugrundeliegenden Dateisystem abhängig, in der Regel NTFS. MAX_PATH ist statt dessen die maximale Länge, mit der einige Windows API-Funktionen maximal umgehen können.

    Es ist also mitnichten „die maximal mögliche Länge eines Dateinamens“. Der Rest des Postings schlüsselt das alles zwar etwas auf, aber der Satz am Anfang ist so falsch.

    (wobei es eh eher „Dateipfad“ oder ähnliches heissen sollte)

  2. Coder sagt:

    Vielleicht eine dumme Frage, aber warum braucht man mehr als 260 Zeichen. Verwendet das jemand ernsthaft? Ich bin der Meinung, man sollte seine Dateien so kurz wie möglich bennnen. Das erhöht die Übersichtlichkeit und erleichtert die Auffindung.

  3. Ramirez sagt:

    Wie Sven eigentlich schrieb, sowas geschieht meist unbemerkt. Man hat kein Laufwerk per NET USE oder SUBST erstellt und arbeitet in diesem ohne jemals zu merken, das man die 260 Zeichen im Original längst überschritten hat. Auf dem Server liegen die Dateien in D:\Freigaben\Abteilung\Abteilungsordner, der User sieht nur Laufwerk S:. Nun erlebt man spaßiges beim Versuch D:\Freigaben wegzusichern…

  4. hanni sagt:

    Den Satz mit dem Downloadlink finde ich am Besten! Sehr gut gelacht Sven 😀 Leak the Link ^^

Top