22Aug

Warum ist die Windows-Berichterstellung für diesen Ordner zu lang, um zu kopieren?

Wenn Sie lange genug mit Windows arbeiten, insbesondere mit Ordnern und Dateien, die lange Namen haben, wird ein bizarrer Fehler auftreten: Windows meldet, dass der Ordnerpfad oder Dateiname zu lang ist, um zu einem neuen Ziel zu verschieben oder sogar zu löschen. Was ist das Problem?

Hey How-To Geek!

Also neulich reorganisierte ich einige Dateien auf meinem Computer, erstellte Ordner, solche Sachen. Wenn ich dann einige Dateien in einen Ordner verschiebe, erhalte ich eine Meldung, dass der resultierende Ordnerpfad zu lang sein würde. Ich war verwirrt. Ich weiß, dass jedes einzelne Betriebssystem seit DOS lange Dateinamen unterstützt, Windows behauptet jedoch, dass der Pfad zu lang ist? Warum passiert das?

Mit freundlichen Grüßen

Herr Unorganisiert

Das Problem, auf das Sie stoßen, ist eine unglückliche Kreuzung zweier Systeme, die in solchen Fällen einen Fehler ergibt. Um genau zu verstehen, woher der Fehler kommt, müssen wir uns den Verlauf von Long Filenames( LFN) und die Interaktion von Windows mit ihnen ansehen, bevor wir uns mit Lösungen befassen.

Lange Dateinamen wurden über die zugrunde liegende MS-DOS-Architektur in Windows 95 eingeführt. Das neue LFN-System ermöglichte Datei- und Verzeichnisnamen mit bis zu 255 Zeichen. Dies war eine willkommene Erweiterung des bisherigen Dateinamensystems, das üblicherweise als 8.3 Dateiname bezeichnet wird, da der Name auf acht Zeichen und eine dreistellige Erweiterung begrenzt war, aber auch als Kurzdateiname( SFN) bekannt ist. Wie du dir vorstellen kannst, gab es damals immer noch viele DOS-basierte Apps und es gab mehr als ein paar Kopfschmerzen, um die neueren LFNs und die alten SFNs dazu zu bringen, gut miteinander zu spielen. Wenn Sie jemals auf eine ältere Diskette oder CD-ROM mit merkwürdig abgeschnittenen Dateien gestoßen sind( wie abcdef1.txt), wurde dieser Dateiname von einer SFN-verarbeitenden Legacy-Anwendung von einigen längeren und nicht unterstützten LFNs abgeschnitten( wie abcdefghijk).txt).

Wir sind jedoch weit von Mitte der 1990er Jahre entfernt, und das ganze Long Filename-Ding ist( größtenteils) fest gebügelt. Wenn Sie eine Windows-Version der letzten 10 Jahre verwenden, sind Sie wahrscheinlich nie auf einen Dateinamenlängenkonflikt gestoßen, wie wir ihn in den DOS / Windows 95-Tagen gewohnt waren. Das heißt, wir stoßen immer noch auf Schluckauf, wie Sie mit Ihrem Festplattenbereinigungsprojekt herausgefunden haben. Aber warum? Wenn das Windows-System für lange Dateinamen Ordner und Dateinamen mit bis zu 255 Zeichen pro Komponente unterstützt, an welche Wand stoßen Sie? Wir können NTFS( das Dateisystem, das die überwiegende Mehrheit der modernen Windows-Maschinen verwendet) nicht beschuldigen, da NTFS eine Verkettung von Ordnern und Dateinamen bis zu einer Gesamtpfadlänge von 32.767 Zeichen unterstützt. Das übersteigt die typische Verzeichnisstruktur, die die meisten Benutzer jemals brauchen würden.

Wo alles zusammenbricht, ist eine künstliche Beschränkung, die Windows auf dem LFN / NTFS-System stapelt: die Variable MAX_PATH.Die MAX_PATH-Variable gibt an, dass eine vollständige Verzeichnisstruktur in Windows insgesamt 260 Zeichen nicht überschreiten darf, die den Laufwerksbuchstaben, den Doppelpunkt, den umgekehrten Schrägstrich und das Null-Backlash an dem Ende enthalten. Somit haben Sie nur einen potentiellen realen MAX_PATH von 256 Zeichen, z. B. C: \ Ihr-256-Zeichenpfad \ .

Was passiert ist, wenn Sie Ihren Computer bereinigen, ist, dass Sie ein Verzeichnis mit einem bereits langen Pfad hatten( entweder weil die Ordnernamen lang waren, die Dateinamen lang waren oder beides) und wenn Sie versuchten, einen oder mehrere zu verschiebenVon diesen Verzeichnissen in ein anderes Verzeichnis mit einem langen Pfad überschreitet die Gesamtlänge des Pfadnamens die Grenze von 260 Zeichen, die von der Variablen MAX_PATH auferlegt wird.

Nun denkst du vielleicht "Ah-hah! Wir ändern einfach die MAX_PATH-Variable und lösen das Problem! "Leider ist es nicht so einfach. Die MAX_PATH-Variable ist nicht nur im Wesentlichen fest in Windows codiert, sondern selbst wenn Sie den enormen Aufwand, ihn zu ändern, durchgemacht haben, würden Sie am Ende so viel brechen, dass es sich nicht lohnt. Zu viele Anwendungen erwarten, dass die Pfadvariable so ist, wie Windows sie seit langem angibt. Wir können nicht einfach herumgehen, um es zu verändern, ohne eine enorme Unordnung zu schaffen.

Wohin führt dich das? Nun, die einfachste Lösung besteht darin, nur die Pfaddaten zu bearbeiten. Wenn Sie zum Beispiel eine Menge gespeicherter Artikel haben, bei denen die Anwendung / Erweiterung, mit der Sie sie aus dem Web gespeichert haben, ein Verzeichnis erstellt hat, das den vollständigen Titel des Artikels + des Artikelleiters enthielt, dann ist der Dateiname der vollständige Titeldes Artikels + des Artikels führen, wäre es wirklich einfach, den MAX_PATH mit einem einzelnen Speicher zu treffen oder zu übersteigen. Bearbeiten Sie diese enormen Ordner und Artikel Titel auf eine vernünftige Größe ist eine einfache Möglichkeit, das Problem zu beheben.

Wenn Sie eine große Anzahl von Dateien mit einem langen Pfad haben und Sie nicht alle bearbeiten möchten( oder wenn Sie löschen möchten, müssen Sie eine Menge alter Verzeichnisse löschen, die für Windows zu lang sind, wenn sie von derMAX_PATH-Variable), es gibt eine Befehlszeile, die funktioniert. Obwohl Windows durch die Variable MAX_PATH eingeschränkt ist, erkannten Windows-Ingenieure, dass es Situationen geben würde, in denen Benutzer mit längeren Pfadnamen umgehen müssen. Daher verfügt die Windows-API über eine Funktion zum Behandeln extrem langer Pfade.

Um die Vorteile dieser API zu nutzen und Kommandozeilen-Tools für Ihre unhandlichen Ordner / Dateinamen zu verwenden, müssen Sie einfach den Verzeichnisnamen mit ein paar zusätzlichen Zeichen anhängen. Wenn Sie beispielsweise eine große Verzeichnisstruktur haben, die Sie löschen wollten( aber aufgrund der Pfadlänge beim Versuch einen Fehler erhalten hat), könnten Sie den Befehl folgendermaßen ändern:

rmdir c: \ documents \ some-really-super-long-Ordner-Name-Schema \

zu:

rmdir \\? \ c: \ Dokumente \ einige-wirklich-super-lange-Ordner-Name-Schema \

Der Schlüssel ist die Hinzufügung der \\? \ Teilvor dem Start des Dateipfads;Dies weist Windows an, die von der Variablen MAX_PATH auferlegten Einschränkungen zu ignorieren und mit dem Pfad zu interagieren, den Sie gerade geliefert haben, wie direkt vom zugrunde liegenden Dateisystem geliefert und verstanden( was eindeutig einen längeren Pfad unterstützen kann).Wie immer sollten Sie an der Eingabeaufforderung Vorsicht walten lassen, um versehentliches Löschen von Dateien oder Verzeichnissen zu vermeiden, die intakt bleiben sollen.

Wenn Sie unsere Übersicht zu diesem Thema neugierig machen, lesen Sie diesen Artikel in der Microsoft Developer Network-Bibliothek unter Benennen von Dateien, Pfaden und Namespaces, um mehr über die Vorgänge unter der Oberfläche zu erfahren.

Haben Sie eine dringende technische Frage? Schießen Sie uns eine E-Mail an [email protected] und wir werden unser Bestes tun, um es zu beantworten.